Page 372 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 372
110 void Terminate(List *list)
111 {
112 Clear(list); /* 모든 노드를 삭제 */
113 free(list->n);
114 }
앞에서 살펴본 09-2절의 ‘포인터로 연결 리스트 만들기’ 프로그램은 calloc 함수를 사용한
메모리 영역 확보에 실패한 경우에 대한 처리를 하지 않습니다. 이번 9-3절의 ‘커서로 연결
리스트 만들기’ 프로그램도 마찬가지로 배열의 크기를 넘어 노드를 추가하는 경우에 대한 처
리를 하지 않았습니다.
배열의 비어 있는 요소 처리하기
실습 9-5에서 작성한 프로그램의 각 함수는 09-2절에서 작성한 포인터로 연결 리스트 만들
기 프로그램(실습 9-1, 9-2)과 일대일로 대응합니다. 이때 발생할 수 있는 가장 중요한 문제인
‘삭제한 노드 관리’로 관심을 옮겨 조금 더 자세히 살펴보겠습니다. 그러면 그림 9-15를 통해
노드의 삽입과 삭제에 대해 알아보겠습니다.
head
a head 1 0 C 2
1 A 3
1 3 0 2 2 D -1
A B C D ❸ B 0
4 - -
5 - -
head
b head 4 0 C 2
1 A 3
4 1 3 0 2 2 D -1
E A B C D 3 B 0
❹ E -
5 - -
노드 E를 삽입합니다.
head
c head 4 0 C 2
1 A 3
4 1 3 0 2 2 D -1
E A B C D 3 - -
❹ E 1
노드 B를 삭제합니다. 5 - -
빈 배열 상태가 됩니다.
[그림 9-15] 연결 리스트에서 노드의 삽입과 삭제
372 C 알고리즘