问题遇到的现象和发生背景
c语言编写哈希表的的简单应用(开放地址法)
// 哈希表查找关键字
int searchHash(HashTable *hash, int key, int address)
{
address = hashFun(key); // 求哈希地址
while (hash->elem[address] != key) // 否则,使用开放定址法继续查找
{
address = (address + 1) % m; // 开放定址法的线性探测
if(address>=m)address = 0;
// 如果 查找到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;//查找成功
}
// 插入关键字进哈希表
void insertHash(HashTable *hash, int key,int address)
{
if(searchHash(hash, key,address) == 1)//查找数据成功,显示地址
{
printf("已有该关键字!");
printf("关键字%d的哈希地址为 %d \n",key,address);//问题处
}
else
{
address = hashFun(key); // 求直接哈希地址
while (hash->elem[address] != NULLKEY) // 如果不为空,则冲突
{
/* if(hash->elem[address] == key)
{
printf("已有该关键字!");
printf("关键字%d的哈希地址为 %d \n",key,address);
return 0;
}
*/
address = (address + 1) % m; // 开放定址法的线性探测
}
hash->elem[address] = key; // 直到有空位后插入关键字
printf("插入成功!关键字%d的哈希地址为 %d \n",key,address);
}
}
遇到的问题如图