电话查询系统
关注博主不迷路,博主带你码代码!
1. 项目要求
- 设每个记录有以下数据项:用户名、电话、地址
- 从键盘输入各个记录,以电话号码为关键字建立哈希表
- 能够增加、修改、删除给定电话号码的相关记录
2. 数据样例
7
17718881666 chen hunan
12837192867 yuan hubei
18998239899 duan loudi
13689721388 qian hefei
19999999999 zhang beijing
12673678523 liu liuan
13876352729 luo fujian
3. 运行界面
-
菜单页面
-
添加电话
-
查询电话
-
修改信息
-
删除电话
-
退出系统
4. 代码分析
-
哈希函数
key 值的确定是按照电话号码的求和 % MAXSIZE所得的
% MAXSIZE 的原因是因为放置下标越界int GetHashKey(char ar[])
{
int len = strlen(ar);
int key = 0;
int i;
for(i = 0; i < len; i ++ )
{
key += ar[i] - ‘0’;
}
return key % MAXSIZE;
} -
冲突处理
哈希冲突处理,这里采用的是二次探测法,将 Cay 分为两种情况,当 Cay 为奇数的时候,我们向后探测,当 Cay 为偶数的时候,我们向前探测,不管在向前还是向后探测,我们都要对其取模,防止下标越界,但是在向后探测的时候,可能是负数,为了方便取模,我们对于负数的时候就直接跳过就好了。//冲突处理,二次探测再散列
int HandleCollision(HashTable table, int key)
{
Czy = 1; //从2,3,4,5,…
while(1)
{
Czy ++ ; //从2,3,4,5,…
if(Czy % 2 == 0)
{
if(table->data[