Page 394 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 394
노드를 삭제하는 Remove 함수
Remove 함수는 p가 가리키는 노드를 삭제하는 함수로, 그림 9-28을 보면서 살펴보겠습니
다. a 는 삭제하기 전의 상태입니다. 노드 A(p->prev)와 노드 C(p->next) 사이에 있는 노드 B
를 삭제한 다음의 상태는 b 가 되며 삭제하는 과정은 다음과 같습니다.
a 삽입 전 p->prev p p->next
삽입 전
A B C
삽입 후
b 삽입 후
A B C
[그림 9-28] 원형 이중 연결 리스트에서 노드를 삭제하는 과정
1. 노드 A의 뒤쪽 포인터 p->prev->next가 가리키는 노드가 C(p->next)가 되도록 업데이트합니다.
2. 노드 C의 앞쪽 포인터 p->next->prev가 가리키는 노드가 A(p->prev)가 되도록 업데이트합니다. 그런
다음 p가 가리키는 메모리 영역을 해제합니다.
3. 선택한 노드가 삭제한 노드의 앞쪽 노드 A를 가리킬 수 있도록 crnt를 업데이트합니다.
머리 노드를 삭제하는 RemoveFront 함수
RemoveFront 함수는 머리 노드를 삭제하는 함수로, Remove 함수를 사용해 포인터 list->
head->next가 가리키는 머리 노드를 삭제합니다. 이때 더미 노드는 삭제하면 안 됩니다. 따
라서 list->head가 가리키는 더미 노드가 아닌 그 다음의 노드 list->head->next를 삭제합
니다.
꼬리 노드를 삭제하는 RemoveRear 함수
RemoveRear 함수는 꼬리 노드를 삭제하는 함수로, 포인터 list->head->prev가 가리키는
꼬리 노드를 삭제합니다.
선택한 노드를 삭제하는 RemoveCurrent 함수
RemoveCurrent 함수는 선택한 노드를 삭제하는 함수로, 포인터 list->crnt가 가리키는 노
드를 삭제합니다.
394 C 알고리즘