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

33을 검색하는 경우(그림 11-7  a )

                        33의 해시 값은 7이므로 table[7]이 가리키는 연결 리스트를 하나씩 끌어당기며 찾습니다.
                        20, 33을 순서대로 끌어당기면 검색 성공입니다.


                          26을 검색하는 경우(그림 11-7  b )

                        26의 해시 값은 0입니다. table[0]이 NULL이므로 검색 실패입니다.
                           그림 11-7은 실습 11-4[B] 이후에 배치되어 있습니다.


                        위의 두 가지 경우에서 공통으로 수행하는 검색 과정을 정리하면 아래와 같습니다.


                         1. 해시 함수가 키 값을 해시 값으로 변환합니다.
                         2. 해시 값을 인덱스로 하는 버킷을 선택합니다.
                         3.   선택한 버킷의 연결 리스트를 처음부터 순서대로 검색합니다. 키 값과 같은 값을 찾으면 검색 성공입니다.
                           끝까지 스캔하여 찾지 못하면 검색 실패입니다.




                        Search 함수가 반환하는 값은 찾아낸 데이터에 대한 포인터입니다. 검색에 실패하면 공백 포
                        인터 NULL을 반환합니다.


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

                         01  /*--- 검색 ---*/
                         02  Node *Search(const ChainHash *h, const Member *x)
                         03  {
                         04    int key = hash(x->no, h->size);   /* 검색하는 데이터의 해시 값 */
                         05    Node *p = h->table[key];        /* 현재 선택한 노드 */
                         06
                         07    while(p != NULL) {
                         08      if(p->data.no == x->no)       /* 검색 성공 */
                         09        return p;
                         10      p = p->next;                /* 다음 노드를 선택 */
                         11    }
                         12    return NULL;                  /* 검색 실패 */
                         13  }
                         14
                         15  /*--- 데이터 추가 ---*/
                         16  int Add(ChainHash *h, const Member *x)
                         17  {
                         18    int key = hash(x->no, h->size);   /* 추가하는   데이터의 해시 값 */
                         19    Node *p = h->table[key];        /* 현재 선택한 노드 */


                                                                                          11•해시  439
   434   435   436   437   438   439   440   441   442   443   444