PersesTitan(페르) 기술블로그

[C] 리스트 add, set, delete간단하게 구현해보기 본문

Language/C

[C] 리스트 add, set, delete간단하게 구현해보기

PersesTitan(페르) 2023. 12. 18. 13:26

기본 구조

(element는 저장할 데이터 타입입니다.)

typedef struct {
    element array[SIZE];
    int size;
} ArrayListType;

size: 객체의 길이를 나타냅니다.

 

리스트 뒤에 객체 추가(add)

마지막에 추가하는 코드는 간단합니다. 크기를 1증가 시키고 해당 위치에 값을 넣어주면 됩니다.

void add(ArrayListType *l, element item) {
    if (l->size >= SIZE)
        fprintf(stderr, "Stack Over Flow");
    l->array[l->size++] = item;
}

 

특정 위치에 객체 추가(set)

position(값을 넣을 위치)가 범위를 넘어가지 않았는지 확인하고 만약 값이 유효하다면 position뒤에 값을 1칸씩 뒤로 밀어서 저장한뒤 해당 위치에 넣어야할 객체를 넣고 크기(size)를 1증가 시켜주면 됩니다.

void set(ArrayListType *l, int position, element item) {
    if (l->size != SIZE && position >= 0 && position <= l->size) {
        for (int i = l->size; i > position; i--)
            l->array[i] = l->array[i-1];
        l->array[position] = item;
        l->size++;
    }
}

 

특정 위치 객체 삭제 (delete)

삭제된 객체의 값을 반환하기 위해서 임시로 삭제할 객체를 item에 저장하고 사이즈를 1줄인뒤에 삽입에 반대로 position위치로 1칸씩 당겨서 저장해줍니다.

 

element delete(ArrayListType *l, int position) {
    if (position < 0 || position >= l->size) {
        fprintf(stderr, "Index Error: %d", position);
        exit(1);
    }
    element item = l->array[position];
    l->size--;
    for (int i = position; i < l->size; ++i)
        l->array[i] = l->array[i+1];
    return item;
}

'Language > C' 카테고리의 다른 글

[C++] 입출력 연산자 재정의 (오버라이딩)하기  (0) 2024.01.24
[C] 원형큐 구조 정리  (0) 2023.12.17
[C] 선형큐 구조 정리  (0) 2023.12.17
[C] 거듭제곱 함수 만들기  (0) 2023.10.23
[C] 팩토리얼 함수 만들기  (2) 2023.10.23