Page 368 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 368
16 }
17 }
18
19 /*--- 지정된 레코드를 삭제 리스트에 등록 ---*/
20 static void DeleteIndex (List *list, Index idx)
21 {
22 if(list->deleted == Null) { /* 삭제할 레코드가 없는 경우 */
23 list->deleted = idx;
24 list->n[idx].Dnext = Null;
25 }
26 else {
27 Index ptr = list->deleted;
28 list->deleted = idx;
29 list->n[idx].Dnext = ptr;
30 }
31 }
32
33 /*--- n이 가리키는 노드의 각 멤버에 값을 설정 ----*/
34 static void SetNode(Node *n, const Member *x, Index next)
35 {
36 n->data = *x; /* 데이터 */
37 n->next = next; /* 다음 노드에 대한 포인터 */
38 }
39
40 /*--- 연결 리스트를 초기화 ---*/
41 void Initialize(List *list, int size)
42 {
43 list->n = calloc(size, sizeof(Node));
44 list->head = Null; /* 머리 노드 */
45 list->crnt = Null; /* 선택한 노드 */
46 list->max = Null;
47 list->deleted = Null;
48 }
49
50 /*--- compare 함수로 x와 일치하는 노드 검색 ---*/
51 Index search (List *list, const Member *x, int compare(const Member *x, const Member *y))
52 {
53 Index ptr = list->head;
54 while(ptr != Null) {
55 if(compare(&list->n[ptr].data, x) == 0) {
368 C 알고리즘