Page 364 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 364
09-3 커서로 연결 리스트 만들기
이번에는 각 노드를 배열 안의 요소에 저장하고 그 요소를 잘 이용해 연결 리스트를 구현하는
방법을 알아보겠습니다.
커서로 연결 리스트 만들기
09-2절에서 살펴본 연결 리스트는 ‘노드의 삽입, 삭제를 데이터 이동 없이 수행한다’라는 특
징이 있었지만 삽입, 삭제를 수행할 때마다 노드용 객체를 위한 메모리 영역을 만들고 해제하
는 과정이 필요했습니다. 메모리 영역을 만들고 해제하는 데 필요한 비용은 결코 무시할 수
없습니다. 이때 프로그램 실행 중에 데이터의 개수가 크게 바뀌지 않고 데이터 개수의 최댓값
을 미리 알 수 있다고 가정하면 그림 9-13처럼 배열을 사용해 효율적으로 연결 리스트를 운
용할 수 있습니다.
커서를 사용하는 연결 리스트는 데이터 개수의 최댓값을 미리 계산하여 모든 노드를 저장하기에 충분한 크기의 배열을 만
들어야 합니다.
a 배열로 구현한 연결 리스트의 논리적인 이미지
head 인덱스
1 4 3 0 2 5
A B C D E F
b 연결 리스트를 배열로 구현한 경우
head 1 0 D 2
1 A 4
2 E 5 다음 노드 인덱스 3
머리 노드의 3 C 0
인덱스 값 4 B 3
5 F -1
6 - -
7 - -
데이터 다음 노드의 인덱스를 저장하고 있는 커서
[그림 9-13] 커서를 사용한 연결 리스트
배열의 커서에 해당하는 값은 다음 노드에 대한 포인터가 아니라 다음 노드가 들어 있는 요소
의 인덱스에 대한 값입니다. 여기서 포인터 역할을 하는 인덱스를 커서(cursor)라고 합니다.
364 C 알고리즘