1/**//*
2해시테이블(Hashtable) :
3 배열의 인덱스값을 사용하지 않고,
4 문자열의 키값을 사용하여 데이터 입력과 출력을 할 수 있는 구조
5*/
6#include <stdio.h>
7#include <string.h>
8
9#define TableSize 1000
10#define ModSize 1000
11
12int Hashtable(char *);
13
14// 간단한 이름과 전화번호를 저장하는 구조체
15struct PhoneAddress
16...{
17 char Name[25]; // 이름 필드
18 char Phone[15]; // 전화번호 필드
19}mobile[TableSize];
20
21void main(void)
22...{
23 int n;
24 int i = 0;
25 char name[25], phone[15];
26
27 printf("이름(영문대문자) 전화번호\n");
28 for (i = 0;i < 3;i++)
29 ...{
30 scanf("%s %s", name, phone);
31 n = Hashtable(name); // 해시테이블로부터 인덱스 받아오기
32 strcpy(mobile[n].Name, name);
33 strcpy(mobile[n].Phone, phone);
34 }
35
36 //rewind(stdin);
37 printf("검색할 데이터를 입력하세요.\n");
38 for (i = 0;i < 3;i++)
39 ...{
40 scanf("%s", name);
41 n = Hashtable(name); // 해시테이블로부터 인덱스 받아오기
42 printf("%25s %15s\n", mobile[n].Name, mobile[n].Phone);
43 }
44}
45
46// 해시 알고리즘을 사용하여 해시 데이터 만들기
47int Hashtable(char *s)
48...{
49 int n;
50
51 n = strlen(s);
52 return
53 (s[0] - 'A' + (s[n/2-1]-'A') * 26 + (s[n-2]-'A')*26*26)
54 % ModSize;
55}
56
57/**//*
58이름 전화번호
59NN 111
60BB 222
61CC 333
62검색할 데이터를 입력하세요.
63BB
64 BB 222
65CC
66 CC 333
67NN
68 NN 111
69계속하려면 아무 키나 누르십시오 . . .
70*/