Page 389 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 389
터인 ptr을 반환합니다. 이때 crnt는 찾은 노드(ptr)를 가리키도록 설정합니다. 노드를 찾지 못
하고 한 바퀴 돌아 다시 더미 노드로 돌아오면(ptr이 head와 같으면) 검색에 실패한 것입니다.
while문을 종료하고 널(NULL)을 반환합니다.
빈 리스트를 검색하는 경우라 가정하고 이 함수가 정말 검색에 실패하는지(널(NULL)을 반환하
는지) 알아보겠습니다. 그림 9-24는 더미 노드만 있는 빈 리스트 상태입니다. ptr에 대입하는
list->head->next 값은 더미 노드에 대한 포인터입니다. 다시 말해 list->head와 같은 값이
ptr에 대입됩니다. 그러면 while문의 제어식 ptr != list->head가 성립되지 않기 때문에
while문은 실행되지 않고 바로 널(NULL)을 반환하며 함수가 종료됩니다.
head
head->prev
-
head->next
[그림 9-24] 빈 원형 이중 연결 리스트를 검색하는 경우
조금만 더! 원형 이중 연결 리스트에서 p가 가리키는 노드의 위치를 판단하는 방법
원형 이중 연결 리스트에서 Dnode *형의 포인터 p가 리스트의 어떤 노드를 가리키는 경우 p가 가리키는
노드의 위치를 판단하려면 다음 식을 사용합니다.
p->prev == list->head /* p가 가리키는 노드가 머리 노드인지 확인합니다. */
p->prev->prev == list->head /* p가 가리키는 노드가 2번째 노드인지 확인합니다. */
p->next == list->head /* p가 가리키는 노드가 꼬리 노드인지 확인합니다. */
p->next->next == list->head /* p가 가리키는 노드가 2번째 노드인지 확인합니다. */
실습 9-8[C] •완성 파일 chap09/CircDblLinkedList.c
01 /*--- 모든 노드의 데이터를 리스트 순서대로 출력 ---*/
02 void Print (const Dlist *list)
03 {
04 if(IsEmpty(list))
05 puts("노드가 없습니다.");
06 else {
07 Dnode *ptr = list->head->next;
08 puts("【모두 보기】");
09•리스트 389