본문 바로가기
Programming/Algorithm

배열기반 리스트(ArrayList)

by OKOK 2018. 5. 7.


#include <stdio.h>
#include "ArrayList.h"
 
int main(void) {
 
    List list; // 구조체 변수 선언.
    int data;
    ListInit(&list); // 선언한 변수 초기화.
 
    LInsert(&list, 11);
    LInsert(&list, 11);
    LInsert(&list, 22);
    LInsert(&list, 22);
    LInsert(&list, 33);
 
    printf("current data num : %d \n", LCount(&list));
 
    if (LFirst(&list, &data)) {
        printf("%d ", data);
 
        while (Lnext(&list, &data))
            printf("%d ", data);
    }
    printf("\n\n");
 
    if (LFirst(&list, &data)) {
        if (data == 2)
            LRemove(&list);
 
        while (LNext(&list, &data)) {
            if (data == 22)
                LRemove(&list);
        }
    }
 
    printf("current data num : %d \n", LCount(&list));
 
    if (LFirst(&list, &data)) {
        pritnf("%d ", data);
        while (LNext(&list, &data))
            printf("%d ", data);
    }
    printf("\n\n");
    
    return 0;
 
 
}
cs

단점 : 배열의 길이가 초기에 결정되어야 한다. 변경이 불가능 하다.

삭제의 과정에서 데이터의 이동이 매우 빈번하게 일어난다.


장점 :

데이터의 참조가 쉽다. 인덱스 값을 기준으로 어디든 한 번에 참조가 가능하다. 


구조체 선언시 배열을 하나 만들기. 그리고 삽입시에 필요한 numOfData 변수 만들기. 그리고 꺼내서 읽을 때 필요한 curPosition 변수 만들기.


그리고 함수에서는 numOfData 와 curPosition 을 사용해서 List 를 초기화하고, 삽입하고 처음것과 그 다음의 것. 그리고 삭제하는 것이 있습니다. 그리고 추가로 리스트의 개수를 나타내는 함수가 있습니다. 구조체 안에서 값을 접근하기 위해서 (plist->numOfData) 와 같이 -> 연산자를 사용하고 있습니다.