[Data Structure] #Array - C언어

배열이란?


배열을 사용하면 메모리에 고정된 크기를 할당하며 연속적으로 데이터를 저장할 수 있습니다. 하지만 동적으로 크기를 줄이거나 늘릴 수 없다는 말이기도 합니다.

배열은 index로 요소에 접근하기 때문에 검색을 매우 빠르게 할 수 있습니다. 그러나 삽입, 삭제 연산을 할 경우 기존의 데이터들을 이동시켜야 하는 단점도 가지고 있죠.

구현


#include <stdio.h>
#include <stdlib.h>

#define MAX_LIST_SIZE 100

typedef struct {
  int array[MAX_LIST_SIZE];
  int size;
} ArrayList;

void init(ArrayList *L) {
  L->size = 0;
}

int is_empty(ArrayList *L) {
  return L->size == 0;
}

int is_full(ArrayList *L) {
  return L->size == MAX_LIST_SIZE;
}

void print_array(ArrayList *L) {
  for (int i = 0; i < L->size; i++) {
    printf("%d ->", (L->array[i]));
  }
}

void insert(ArrayList *L, int pos, int item) {
  if (is_full(L)) {
    printf("array is full");
    exit(1);
  }

  if (pos >= 0 && pos < L->size) {
    for (int i = L->size - 1; i >= pos; i--) {
      L->array[i + 1] = L->array[i];
    }
    L->array[pos] = item;
    L->size++;
  }
}

void insert_last(ArrayList *L, int item) {
  if (is_full(L)) {
    printf("array is full");
    exit(1); 
  }
  L->array[L->size++] = item;
}

int delete_item(ArrayList *L, int pos) {
  if (is_empty(L)) {
    printf("array is empty");
    exit(1);
  }

  if (pos < 0 || pos > L->size) {
    printf("pos error");
    exit(1);
  }
  for (int i = pos + 1; i < L->size; i++) {
    L->array[i - 1] = L->array[i];
  }
  L->size--;
  return L->array[pos];
}

int main(void) {
  ArrayList list;

  init(&list);
  insert_last(&list, 1);
  insert_last(&list, 2);
  insert_last(&list, 3);
  insert_last(&list, 4);
  insert_last(&list, 5);
  insert(&list, 3, 10);
  insert(&list, 5, 10);

  delete_item(&list, 1);
  delete_item(&list, 4);
  print_array(&list);
  return 0;
}

좋은 웹페이지 즐겨찾기