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

0   1   2   3    4   5    6   7    8   9    10   11   12
                    a
                              14       29   69   5   6   46


                                           17            20


                                                         33



                           0   1   2   3    4   5    6   7    8   9    10   11   12
                    b
                              14       29   69   5   6   46


                                     69를 삭제  17          20


                                                         33


                                      [그림 11-8] 체인법에 의한 해시에서의 삭제

                     실습 11- 4[C]                                          •완성 파일 chap11/ChainHash.c
                     01  /*--- 데이터 삭제 ---*/
                     02  int Remove(ChainHash *h, const Member *x)
                     03  {
                     04     int key = hash(x->no, h->size);   /* 삭제하는 데이터의 해시 값 */
                     05     Node *p = h->table[key];        /* 현재 선택한 노드 */
                     06     Node **pp = &h->table[key];     /* 현재 선택한 노드에 대한 포인터 */
                     07     while(p != NULL) {
                     08       if(p->data.no == x->no) {     /* 찾으면 */
                     09         *pp = p->next;
                     10         free(p);                 /* 해제 */
                     11         return 0;                /* 삭제 성공 */
                     12       }
                     13       pp = &p->next;
                     14       p = p->next;                 /* 다음 노드를 선택 */
                     15     }
                     16     return 1;                    /* 삭제 실패(존재하지 않음) */
                     17  }
                     18
                     19  /*--- 해시 테이블 덤프 ---*/






                   442   C 알고리즘
   437   438   439   440   441   442   443   444   445   446   447