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 알고리즘