Page 382 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 382

typedef struct __node {
                      Member        data;   /* 데이터 */
                      struct __node *prev;   /* 앞쪽 노드에 대한 포인터 */
                      struct __node *next;   /* 다음 노드에 대한 포인터 */
                    } Dnode;

                                               Dnode
                                               prev

                                               data
                                               next
                                 [그림 9-19] 이중 연결 리스트의 노드 구성


                   머리 노드인지 판단하는 방법

                   이때 Dnode *형 변수 p가 리스트의 어떤 노드를 가리키는 경우 p가 가리키는 노드가 이중 연
                   결 리스트의 머리 노드인지 판단하려면 다음 식을 사용합니다.
                      다음 두 가지 방법 중 하나만 사용하면 됩니다.



                     p == list->head    /* p가 가리키는 노드가 머리 노드인지 확인합니다. */
                     p->prev == NULL    /* p가 가리키는 노드가 머리 노드인지 확인합니다. */



                   꼬리 노드인지 판단하는 방법
                   또 p가 가리키고 있는 노드가 꼬리 노드인지 판단하려면 다음 식을 사용합니다.


                     p->next == NULL    /* p가 가리키는 노드가 꼬리 노드인지 확인합니다. */





                   원형 이중 연결 리스트

                   그러면 바로 앞에서 공부한 두 가지의 개념을 합한 원형 이중 연결 리스트(circular doubly
                   linked list)에 대해 알아보겠습니다.


                                꼬리 노드를 가리킵니다.
                   head


                                A      B      C       D      E       F



                                                         머리 노드를 가리킵니다.

                                    [그림 9-20] 원형 이중 연결 리스트

                   382   C 알고리즘
   377   378   379   380   381   382   383   384   385   386   387