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

해시 테이블을 관리하는 구조체 ChainHash

                   해시 테이블을 관리하기 위한 구조체가 ChainHash이며, 이 구조체는 두 멤버로 구성됩니다.


                     size : 해시 테이블의 크기(table(배열)의 요소 개수)입니다.
                     table : 해시 테이블을 저장하는 배열의 첫 번째 요소에 대한 포인터입니다.



                   실습 11-4의 ChainHash.c가 소스입니다. 그러면 먼저 함수에 대해 하나씩 살펴보겠습니다.


                   해시 값을 구하는 hash 함수

                   해시 값을 구하는 함수입니다. 이 프로그램은 int형 회원 번호가 키(key)이므로 실인수 key로
                   받은 회원 번호 값을 해시 테이블의 크기 size로 나눈 나머지를 반환합니다.


                   노드에 값을 설정하는 SetNode 함수

                   버킷의 노드에 값을 설정하는 함수입니다. 두 번째 인수가 가리키는 데이터를 data에 저장하
                   고 세 번째 인수로 전달받은 다음 노드에 대한 포인터를 next에 저장합니다.



                   위의 두 함수는 ChainHash.c 안에서만 사용하는 함수입니다. 따라서 그 다음에 정의할 함수
                   와는 다음과 같은 차이점이 있습니다.


                     1. 헤더 부분 ChainHash.h에 함수 선언이 없습니다(선언할 필요가 없습니다).
                     2. static을 붙여 함수를 정의하여 내부 결합(보충수업 11-3)을 합니다.

                      SetNode 함수의 두 번째 매개변수는 포인터가 아니라 값으로 주고받아도 됩니다. 즉, 아래처럼 정의할 수 있
                   습니다.



                     static void SetNode(Node *n, Member x, const Node *next)
                     {
                       n->data = x;            /* 데이터 */
                       n->next = next;          /* 다음 노드에 대한 포인터 */
                     }




                   그렇지만 구조체에서 매개변수를 주고받을 때는 값이 아니라 포인터로 하는 것이 정석(定石)
                   입니다. 함수 사이에 주고받는 데이터의 크기(바이트 수)에 제한이 있기 때문입니다.






                   436   C 알고리즘
   431   432   433   434   435   436   437   438   439   440   441