#include <stdio.h>
#ifndef __ARRAY_LIST_H__
#define __ARRAY_LIST_H__
#define TRUE 1
#define FALSE 0
/*** ArrayList의 정의 ****/
#define LIST_LEN 100
typedef int LData;
typedef struct __ArrayList
{
LData arr[LIST_LEN];
int numOfData;
int curPosition;
} ArrayList;
/*** ArrayList와 관련된 연산들 ****/
typedef ArrayList List;
void ListInit(List * plist);
void LInsert(List * plist, LData data);
int LFirst(List * plist, LData * pdata);
int LNext(List * plist, LData * pdata);
LData LRemove(List * plist);
int LCount(List * plist);
#endif
void ListInit(List * plist)
{
(plist->numOfData) = 0;
(plist->curPosition) = -1;
}
void LInsert(List * plist, LData data)
{
if(plist->numOfData > LIST_LEN)
{
return;
}
plist->arr[plist->numOfData] = data;
(plist->numOfData)++;
}
int LFirst(List * plist, LData * pdata)
{
if(plist->numOfData == 0)
return FALSE;
(plist->curPosition) = 0;
*pdata = plist->arr[0];
return TRUE;
}
int LNext(List * plist, LData * pdata)
{
if(plist->curPosition >= (plist->numOfData)-1)
return FALSE;
(plist->curPosition)++;
*pdata = plist->arr[plist->curPosition];
return TRUE;
}
LData LRemove(List * plist)
{
int rpos = plist->curPosition;
int num = plist->numOfData;
int i;
LData rdata = plist->arr[rpos];
for(i=rpos; i<num-1; i++)
plist->arr[i] = plist->arr[i+1];
(plist->numOfData)--;
(plist->curPosition)--;
return rdata;
}
int LCount(List * plist)
{
return plist->numOfData;
}
int main(void)
{
/*** ArrayList의 생성 및 초기화 ***/
List list;
int data;
ListInit(&list);
/*** 5개의 데이터 저장 ***/
LInsert(&list, 11); LInsert(&list, 11);
LInsert(&list, 22); LInsert(&list, 22);
LInsert(&list, 33);
/*** 저장된 데이터의 전체 출력 ***/
printf("현재 데이터의 수: %d \n", LCount
(&list
));
if(LFirst(&list, &data)) // 첫 번째 데이터 조회
{
while(LNext(&list, &data)) // 두 번째 이후의 데이터 조회
}
/*** 숫자 22을 탐색하여 모두 삭제 ***/
if(LFirst(&list, &data))
{
if(data == 22)
LRemove(&list);
while(LNext(&list, &data))
{
if(data == 22)
LRemove(&list);
}
}
/*** 삭제 후 저장된 데이터 전체 출력 ***/
printf("현재 데이터의 수: %d \n", LCount
(&list
));
if(LFirst(&list, &data))
{
while(LNext(&list, &data))
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojaWZuZGVmIF9fQVJSQVlfTElTVF9IX18KI2RlZmluZSBfX0FSUkFZX0xJU1RfSF9fCgojZGVmaW5lIFRSVUUJMQojZGVmaW5lIEZBTFNFCTAKCi8qKiogQXJyYXlMaXN07J2YIOygleydmCAqKioqLwojZGVmaW5lIExJU1RfTEVOCTEwMAp0eXBlZGVmIGludCBMRGF0YTsKCnR5cGVkZWYgc3RydWN0IF9fQXJyYXlMaXN0CnsKCUxEYXRhIGFycltMSVNUX0xFTl07CglpbnQgbnVtT2ZEYXRhOwoJaW50IGN1clBvc2l0aW9uOwp9IEFycmF5TGlzdDsKCgovKioqIEFycmF5TGlzdOyZgCDqtIDroKjrkJwg7Jew7IKw65OkICoqKiovCnR5cGVkZWYgQXJyYXlMaXN0IExpc3Q7Cgp2b2lkIExpc3RJbml0KExpc3QgKiBwbGlzdCk7CnZvaWQgTEluc2VydChMaXN0ICogcGxpc3QsIExEYXRhIGRhdGEpOwoKaW50IExGaXJzdChMaXN0ICogcGxpc3QsIExEYXRhICogcGRhdGEpOwppbnQgTE5leHQoTGlzdCAqIHBsaXN0LCBMRGF0YSAqIHBkYXRhKTsKCkxEYXRhIExSZW1vdmUoTGlzdCAqIHBsaXN0KTsKaW50IExDb3VudChMaXN0ICogcGxpc3QpOwoKI2VuZGlmCgp2b2lkIExpc3RJbml0KExpc3QgKiBwbGlzdCkKewoJKHBsaXN0LT5udW1PZkRhdGEpID0gMDsKCShwbGlzdC0+Y3VyUG9zaXRpb24pID0gLTE7Cn0KCnZvaWQgTEluc2VydChMaXN0ICogcGxpc3QsIExEYXRhIGRhdGEpCnsKCWlmKHBsaXN0LT5udW1PZkRhdGEgPiBMSVNUX0xFTikgCgl7CgkJcHV0cygi7KCA7J6l7J20IOu2iOqwgOuKpe2VqeuLiOuLpC4iKTsKCQlyZXR1cm47Cgl9CgoJcGxpc3QtPmFycltwbGlzdC0+bnVtT2ZEYXRhXSA9IGRhdGE7CgkocGxpc3QtPm51bU9mRGF0YSkrKzsKfQoKaW50IExGaXJzdChMaXN0ICogcGxpc3QsIExEYXRhICogcGRhdGEpCnsKCWlmKHBsaXN0LT5udW1PZkRhdGEgPT0gMCkKCQlyZXR1cm4gRkFMU0U7CgoJKHBsaXN0LT5jdXJQb3NpdGlvbikgPSAwOwoJKnBkYXRhID0gcGxpc3QtPmFyclswXTsKCXJldHVybiBUUlVFOwp9CgppbnQgTE5leHQoTGlzdCAqIHBsaXN0LCBMRGF0YSAqIHBkYXRhKQp7CglpZihwbGlzdC0+Y3VyUG9zaXRpb24gPj0gKHBsaXN0LT5udW1PZkRhdGEpLTEpCgkJcmV0dXJuIEZBTFNFOwoKCShwbGlzdC0+Y3VyUG9zaXRpb24pKys7CgkqcGRhdGEgPSBwbGlzdC0+YXJyW3BsaXN0LT5jdXJQb3NpdGlvbl07CglyZXR1cm4gVFJVRTsKfQoKTERhdGEgTFJlbW92ZShMaXN0ICogcGxpc3QpCnsKCWludCBycG9zID0gcGxpc3QtPmN1clBvc2l0aW9uOwoJaW50IG51bSA9IHBsaXN0LT5udW1PZkRhdGE7CglpbnQgaTsKCUxEYXRhIHJkYXRhID0gcGxpc3QtPmFycltycG9zXTsKCglmb3IoaT1ycG9zOyBpPG51bS0xOyBpKyspCgkJcGxpc3QtPmFycltpXSA9IHBsaXN0LT5hcnJbaSsxXTsKCgkocGxpc3QtPm51bU9mRGF0YSktLTsKCShwbGlzdC0+Y3VyUG9zaXRpb24pLS07CglyZXR1cm4gcmRhdGE7Cn0KCmludCBMQ291bnQoTGlzdCAqIHBsaXN0KQp7CglyZXR1cm4gcGxpc3QtPm51bU9mRGF0YTsKfQoKaW50IG1haW4odm9pZCkKewoJLyoqKiBBcnJheUxpc3TsnZgg7IOd7ISxIOuwjyDstIjquLDtmZQgKioqLwoJTGlzdCBsaXN0OwoJaW50IGRhdGE7CglMaXN0SW5pdCgmbGlzdCk7CgoJLyoqKiA16rCc7J2YIOuNsOydtO2EsCDsoIDsnqUgKioqLwoJTEluc2VydCgmbGlzdCwgMTEpOyAgTEluc2VydCgmbGlzdCwgMTEpOwoJTEluc2VydCgmbGlzdCwgMjIpOyAgTEluc2VydCgmbGlzdCwgMjIpOwoJTEluc2VydCgmbGlzdCwgMzMpOwoKCS8qKiog7KCA7J6l65CcIOuNsOydtO2EsOydmCDsoITssrQg7Lac66ClICoqKi8KCXByaW50Zigi7ZiE7J6sIOuNsOydtO2EsOydmCDsiJg6ICVkIFxuIiwgTENvdW50KCZsaXN0KSk7CgoJaWYoTEZpcnN0KCZsaXN0LCAmZGF0YSkpICAgIC8vIOyyqyDrsojsp7gg642w7J207YSwIOyhsO2ajAoJewoJCXByaW50ZigiJWQgIiwgZGF0YSk7CgkJCgkJd2hpbGUoTE5leHQoJmxpc3QsICZkYXRhKSkgICAgLy8g65GQIOuyiOynuCDsnbTtm4TsnZgg642w7J207YSwIOyhsO2ajAoJCQlwcmludGYoIiVkICIsIGRhdGEpOwoJfQoJcHJpbnRmKCJcblxuIik7CgoJLyoqKiDsiKvsnpAgMjLsnYQg7YOQ7IOJ7ZWY7JesIOuqqOuRkCDsgq3soJwgKioqLwoJaWYoTEZpcnN0KCZsaXN0LCAmZGF0YSkpCgl7CgkJaWYoZGF0YSA9PSAyMikKCQkJTFJlbW92ZSgmbGlzdCk7CgkJCgkJd2hpbGUoTE5leHQoJmxpc3QsICZkYXRhKSkKCQl7CgkJCWlmKGRhdGEgPT0gMjIpCgkJCQlMUmVtb3ZlKCZsaXN0KTsKCQl9Cgl9CgoJLyoqKiDsgq3soJwg7ZuEIOyggOyepeuQnCDrjbDsnbTthLAg7KCE7LK0IOy2nOugpSAqKiovCglwcmludGYoIu2YhOyerCDrjbDsnbTthLDsnZgg7IiYOiAlZCBcbiIsIExDb3VudCgmbGlzdCkpOwoKCWlmKExGaXJzdCgmbGlzdCwgJmRhdGEpKQoJewoJCXByaW50ZigiJWQgIiwgZGF0YSk7CgkJCgkJd2hpbGUoTE5leHQoJmxpc3QsICZkYXRhKSkKCQkJcHJpbnRmKCIlZCAiLCBkYXRhKTsKCX0KCXByaW50ZigiXG5cbiIpOwoJcmV0dXJuIDA7Cn0=