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
   384   385   386   387   388   389   390   391   392   393   394