배열(Array)는 자료를 나열하고 접근할 때 아주 편리.
배열의 장점:
1) 특정한 원소로 즉시 접근할 수 있음
하지만 자료가 100000개 정도 있고, 2번째 요소를 지우고자 한다면 뒤에 있는 99998개의 요소를 한 칸 앞으로 덮어쓰기 해 주어야만 한다. 또 맨 앞에 요소를 추가할 때는 배열을 모두 한 칸씩 뒤로 미룬 다음 배열의 0번째 인덱스에 값을 입력한다. 코드상으로는 이렇게 표현할 수 있다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define INF 10000
int arr[INF];
int count = 0;
void addBack(int data) {
arr[count] = data;
count++;
}
void addFirst(int data) {
for (int i = count; i >= 1; i--) {
arr[i] = arr[i - 1];
}
arr[0] = data;
count++;
}
void deleteItem(int index) {
for (int i = index; i < count - 1; i++) {
arr[i] = arr[i + 1];
}
count--;
}
void show() {
for (int i = 0; i < count; i++) {
printf("%d", arr[i]);
}
printf("\n");
}
int main(void) {
addBack(5);
addBack(8);
addBack(7);
addFirst(3);
addFirst(4);
deleteItem(2);
show();
system("pause");
return 0;
}
출력하면 다음과 같은 결과가 나온다
앞서 설명한 것과 같이 5, 8, 7 순서로 뒤로 데이터를 추가해주다가 전체 데이터를 한 칸씩 밀고 3 추가하고 또 밀고 4를 추가한 다음 최종적으로 2번째 인덱스인 5 (0부터 카운트를 시작하므로 5가 맞음) 를 제거하고 뒤에 있는 데이터를 한 칸 앞으로 끌어와 덮어쓰는 프로그램이다.
배열의 단점:
1) 데이터가 들어갈 메모리를 미리 확보해 주어야 함. 정적할당은 쓸모없는 메모리 낭비 야기.
2) 특정한 위치로의 삽입이나 삭제가 번거로움.
이 단점에서 개선된 자료구조가 연결리스트이다.
'Algorithms > Theory' 카테고리의 다른 글
[Data Structures][1]Singly Linked List (0) | 2019.08.24 |
---|