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

20  void Dump(const ChainHash *h)
                         21  {
                         22     int i;
                         23     for(i = 0; i < h->size; i++) {
                         24       Node *p = h->table[i];
                         25       printf("%02d  ", i);
                         26       while(p != NULL) {
                         27         printf("→ %d :(%s)  ", p->data.no, p->data.name);
                         28         p = p->next;
                         29       }
                         30       putchar('\n');
                         31     }
                         32  }
                         33                                                       (실습 11-4[D]에서 계속)



                        해시 테이블의 내용을 출력하는 Dump 함수
                        해시 테이블의 내용을 통째로 출력하는 함수입니다.                             00
                                                                                01  → 14
                                                                                02
                        해시 테이블의 모든 요소(table[0] ~ table[size – 1])에 대하여 다        03 → 29
                                                                                04 → 69 → 17
                        음에 오는 노드를 끌어당기면서 각 노드의 키 값과 데이터를 출                      05  → 5
                                                                                06 → 6
                        력하는 작업을 반복합니다. 그림 11-8의  a  를 예로 들면 오른                  07 → 46 → 20 → 33
                                                                                08
                        쪽처럼 출력됩니다. 같은 해시 값을 갖는 데이터는 화살표(→)                      09
                                                                                10
                        로 연결합니다. 이 함수를 실행하면 같은 해시 값을 갖는 버킷이                     11
                        화살표로 연결된 것을 확인할 수 있습니다.                                 12


                         실습 11-4[D]                                            •완성 파일 chap11/ChainHash.c

                         01  /*--- 모든 데이터 삭제 ---*/
                         02  void Clear(ChainHash *h)
                         03  {
                         04     int i;
                         05     for(i = 0; i < h->size; i++) {
                         06       Node *p = h->table[i];     /* 현재 선택한 노드 */
                         07       while(p != NULL) {
                         08         Node *next = p->next;
                         09         free(p);               /* 현재 선택한 노드의 메모리 해제 */
                         10         p = next;              /* 다음 노드 선택 */






                                                                                          11•해시  443
   438   439   440   441   442   443   444   445   446   447   448