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 알고리즘