在编写一个哈希应用的小程序中始终无法实现对关键字的查找,也导致插入和删除功能始终无法进行,代码完全没有报错
整体也可以运行,但运行到查找功能模块,程序就跑不动了
对于hash定义了一个结构体成员变量为整形elem指针,和整型元素个数count,在模块代码都是用的结构体指针变量来访问成员
模块代码:
// 哈希表查找关键字
int searchHash(HashTable *hash, int key, int address)
{
address = hashFun(key); // 求哈希地址
while (hash->elem[address] != key) // 否则,使用开放定址法继续查找
{
address = (address + 1) % m; // 开放定址法的线性探测
// 如果 查找到NULLKEY | 循环回到原点,则说明关键字不存在,返回FALSE
if(hash->elem[address] == NULLKEY || address ==hashFun(key))
printf("查找 %d 失败。\n", key);
return 0; //查找失败
}
hash->elem[address] = key;
printf("查找%d的哈希地址为 %d \n",key,address);
return 1;//查找成功
}
主函数里调用它:
int main()
{
// int arr[HASHSIZE] = {12, 67, 56, 16, 25, 37, 22, 29, 15, 47, 48, 34}; // 要插入关键字
int key; // 关键字
int address; // 哈希地址
int i;
HashTable hash;
while(1)
{
printf("==================哈希表的应用==================\n ");
printf("-------------------1.创建哈希表-----------------\n") ;
printf("-------------------2.显示哈希表-----------------\n") ;
printf("-------------------3.插入关键字-----------------\n") ;
printf("-------------------4.查找关键字-----------------\n") ;
printf("-------------------5.删除关键字-----------------\n") ;
printf("-------------------0.退出-----------------\n") ;
printf("请输入你的选择:");
scanf("%d",&i);
switch(i)
{
case 0: printf("\n提示:退出系统!\n");break;
case 1: initHashTable(&hash);break;
case 2: print_HashTable(&hash);break;
case 3: printf("请输入要插入的关键字:");
scanf("%d \n",&key);
insertHash(&hash,key,address);
break;
case 4: printf("请输入要查找的关键字:");
scanf("%d \n",&key);
searchHash(&hash, key,address);
break;
case 5: printf("请输入要删除的关键字:");
scanf("%d \n",&key);
DEL_HashTable(&hash, key,address);
break;
}
}
}
跑的结果:卡住完全没反应
我的解答思路和尝试过的方法
尝试修改函数类型为void来改写部分代码,但实际还是int用返回值来判断比较方便,我觉得代码逻辑完全没有问题,编译也没有错,死磕不出问题在哪里