Page 431 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 431
그래서 해시 함수는 가능하면 해시 값이 중복되지 않도록 고르게 분포된 값을 만들어야 합니다.
충돌에 대한 대처
충돌이 발생할 경우의 대처 방법으로는 아래의 두 가지가 있습니다. 여기에서는 이 방법에 대
해 살펴보겠습니다.
1. 체인법 : 같은 해시 값을 갖는 요소를 연결 리스트로 관리합니다.
2. 오픈 주소법 : 빈 버킷을 찾을 때까지 해시를 반복합니다.
키 값과 데이터
해시법을 사용하는 프로그램에서 다루는 데이터는 단순한 정수나 실수가 아니라 여러 데이
터가 결합된 ‘구조체’인 경우가 많습니다. 그래서 체인법과 오픈 주소법을 배우기 전에 프로
그램에서 사용할 데이터인 구조체를 먼저 정의해 보겠습니다.
스포츠클럽의 회원을 생각해 보겠습니다. 실제로 스포츠클럽의 회원에 대한 정보는 많은 데
이터로 구성되지만 여기서는 회원 번호(간단히 ‘번호’라고 표현)와 이름만을 생각한다고 가정합
시다. 번호는 int형 정수, 이름은 문자열로 하고 이 두 가지의 자료형을 결합한 구조체를
Member라고 하겠습니다. 또 회원 정보를 출력하는 함수와 멤버의 값을 입력하는 함수가 필
요하므로 두 함수를 미리 만들어둡니다.
실습 11-1의 Member.h가 프로그램의 헤더이고, 실습 11-2의 Member.c가 소스입니다.
각 함수를 정리한 내용은 아래와 같습니다.
실습 11-1 •완성 파일 chap11/Member.h
01 /* 회원 데이터 Member(헤더) */
02 #ifndef ___Member
03 #define ___Member
04
05 /*--- 회원 데이터 ---*/
06 typedef struct {
07 int no; /* 번호 */
08 char name[20]; /* 이름 */
09 } Member;
10
11 #define MEMBER_NO 1 /* 번호를 나타내는 정수 값 */
11•해시 431