문제 9 · 연결 리스트 vs 배열
문제 9 [3점]
연결 리스트linked list가 배열 기반 리스트array-based list와 비교해 가지는 차이점을, 추상 데이터 타입abstract data type(ADT) 및 성능을 중심으로 서술하세요.
풀이 및 해설
두 자료구조 모두 원소들을 순서대로 담는 리스트 ADT를 구현하지만, 내부 저장 방식이 달라 성능 특성이 크게 갈립니다.
저장 방식
- 배열 기반 리스트: 원소를 연속된 메모리에 저장. 인덱스로 위치를 계산합니다.
- 연결 리스트: 각 원소를 노드node에 담고, 노드마다 다음 노드를 가리키는 포인터pointer로 이어 붙입니다. 메모리에 흩어져 있어도 됩니다.
성능 비교
| 연산 | 배열 기반 | 연결 리스트 |
|---|---|---|
| 임의 접근random access (i번째) | O(1) | O(n) |
| 위치를 아는 곳에 삽입·삭제 | O(n) (원소 이동) | O(1) (포인터만 바꿈) |
| 맨 앞 삽입·삭제 | O(n) | O(1) |
| 탐색search (값으로 찾기) | O(n) | O(n) |
- 임의 접근: 배열은 주소 계산으로 즉시 접근하지만, 연결 리스트는 앞에서부터 포인터를 따라가야 하므로 O(n).
- 삽입·삭제: 배열은 뒤 원소를 밀어야 해 O(n)이지만, 연결 리스트는 해당 위치를 알고 있으면 포인터 몇 개만 바꿔 O(1).
그 밖의 차이
- 크기: 배열은 고정 용량(초과 시 재할당·복사 비용), 연결 리스트는 필요할 때마다 노드를 붙여 동적으로 커집니다.
- 메모리 오버헤드: 연결 리스트는 노드마다 포인터를 저장해 추가 메모리를 씁니다.
- 캐시 지역성cache locality: 배열은 연속 저장이라 캐시 효율이 좋고, 연결 리스트는 흩어져 있어 순회 시 캐시 미스가 잦습니다.