1![](/CodeHighlighter/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
2
해시테이블(Hashtable) :
3
배열의 인덱스값을 사용하지 않고,
4
문자열의 키값을 사용하여 데이터 입력과 출력을 할 수 있는 구조
5
*/
6
#include <stdio.h>
7
#include <string.h>
8
9
#define TableSize 1000
10
#define ModSize 1000
11
12
int Hashtable(char *);
13
14
// 간단한 이름과 전화번호를 저장하는 구조체
15
struct PhoneAddress
16![](/CodeHighlighter/Images/OutliningIndicators/ExpandedBlockStart.gif)
...{
17
char Name[25]; // 이름 필드
18
char Phone[15]; // 전화번호 필드
19
}mobile[TableSize];
20
21
void main(void)
22![](/CodeHighlighter/Images/OutliningIndicators/ExpandedBlockStart.gif)
...{
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![](/CodeHighlighter/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
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![](/CodeHighlighter/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
...{
40
scanf("%s", name);
41
n = Hashtable(name); // 해시테이블로부터 인덱스 받아오기
42
printf("%25s %15s\n", mobile[n].Name, mobile[n].Phone);
43
}
44
}
45
46
// 해시 알고리즘을 사용하여 해시 데이터 만들기
47
int Hashtable(char *s)
48![](/CodeHighlighter/Images/OutliningIndicators/ExpandedBlockStart.gif)
...{
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![](/CodeHighlighter/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//*
58
이름 전화번호
59
NN 111
60
BB 222
61
CC 333
62
검색할 데이터를 입력하세요.
63
BB
64
BB 222
65
CC
66
CC 333
67
NN
68
NN 111
69
계속하려면 아무 키나 누르십시오 . . .
70
*/