Algorithms/Theory

[Data Structures][0]Array

esmJK 2019. 8. 23. 23:05

배열(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