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

실습 9-8[D]                                        •완성 파일 chap09/CircDblLinkedList.c
                     01  /*--- p가 가리키는 노드 바로 다음 노드를 삽입 ---*/
                     02  void InsertAfter(Dlist *list, Dnode *p, const Member *x)
                     03  {
                     04    Dnode *ptr = AllocDNode();
                     05    Dnode *nxt = p->next;
                     06    p->next = p->next->prev = ptr;
                     07    SetDNode(ptr, x, p, nxt);
                     08    list->crnt = ptr;        /* 삽입한 노드를 선택 */
                     09  }
                     10
                     11  /*--- 머리에 노드를 삽입 ---*/
                     12  void InsertFront(Dlist *list, const Member *x)
                     13  {
                     14    InsertAfter(list, list->head, x);
                     15  }
                     16
                     17  /*--- 꼬리에 노드를 삽입 ---*/
                     18  void InsertRear(Dlist *list, const Member *x)
                     19  {
                     20    InsertAfter(list, list->head->prev, x);
                     21  }
                     22                                                       (실습 9-8[E]에서 계속)



                   바로 다음에 노드를 삽입하는 InsertAfter 함수
                   InsertAfter 함수는 포인터 p가 가리키는 노드의 바로 다음에 노드를 삽입합니다. 그림 9-26
                   을 통해 좀 더 자세히 살펴보겠습니다.  a 는 p가 노드 B를 가리키고 있는 상태입니다. 이때 노
                   드 B 다음에 노드 D를 삽입하면  b 와 같은 상태가 됩니다. 노드를 삽입한 위치는 p가 가리키는

                   노드와 p->next가 가리키는 노드의 사이입니다. 삽입하는 과정은 다음과 같습니다.

                                   p->prev  p    p->next
                    a  삽입 전
                                    A       B      C                 삽입 전
                                                                     삽입 후


                    b  삽입 후
                                    A       B        C


                                                D


                              [그림 9-26] 원형 이중 연결 리스트에 노드를 삽입하는 과정
                   392   C 알고리즘
   387   388   389   390   391   392   393   394   395   396   397