Yinzhien 2022-03-03 19:00 采纳率: 87.5%
浏览 15
已结题

对哈希表插入元素时,对重复插入的元素的地址溢出是怎么回事?

问题遇到的现象和发生背景

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);
                 
    } 
       
}


遇到的问题如图

img

img

img

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月11日
    • 创建了问题 3月3日

    悬赏问题

    • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
    • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
    • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
    • ¥15 excel 上下按钮 显示行
    • ¥20 云卓h12pro 数传问题
    • ¥20 请问有人知道怎么用工艺库里面的sdb文件通过virtuoso导出来library里面每个cell的symbol吗?
    • ¥20 海思 nnie 编译 报错
    • ¥50 决策面并仿真,要求有仿真结果图
    • ¥15 关于路由器的路由协议配置
    • ¥15 springboot接入微信支付SDK