You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言链地址法实现哈希表碰撞条目不显示,需定位add/print函数错误

问题分析

你的哈希表碰撞条目不显示的问题,add插入函数和print打印函数都存在错误,具体问题如下:

add插入函数存在2处严重错误

  • 空槽判断逻辑完全错误
    你使用Hash[hashIndex].value == NULL做判断有两个问题:一是Hash是全局数组,元素的value字段初始值为0,你全程没有对该字段赋值,所以它永远为0(和NULL比较永远为真),每次插入同哈希索引的元素都会直接覆盖Hash[hashIndex].next,之前的链表节点直接丢失,这是碰撞条目无法显示的核心原因。二是value是int类型,和指针类型的NULL比较本身就是逻辑错误,你用的是头结点不存数据的链地址实现,空槽应该判断Hash[hashIndex].next == NULL。
  • 尾插逻辑存在空指针崩溃风险
    else分支的遍历逻辑会循环到temp == NULL才停止,此时temp是空指针,直接执行temp->next = newNode会触发空指针访问异常,正确逻辑是循环到temp->next == NULL就停止,在当前temp节点后挂载新节点。

print打印函数存在2处错误

  • 遍历终止条件错误
    你用while(temp->next != NULL)做循环条件,链表最后一个节点的next为NULL,会直接跳过最后一个节点不打印。
  • 空链表判断缺失
    如果当前哈希索引下没有任何节点,temp = Hash[i].next就是NULL,直接访问temp->next会触发空指针崩溃。

另外你定义结构体时用了匿名结构体,内部的struct Hashnode* next属于不完整类型,部分编译器会报错,需要给结构体加上标签。

修复后的完整代码
#include <stdio.h>
#include <stdlib.h>

// 给结构体加标签,避免内部next指针类型不完整
typedef struct Hashnode {
    int value;
    struct Hashnode* next;
} Hashnode;

void add(int value);
void print();   

Hashnode Hash[11];

int main() {
    add(12);
    add(44);
    add(13);
    add(88);
    add(23);
    add(94);
    add(11);
    add(39);
    add(20);
    add(16);
    add(5);
    print();
    return 0;
}

void add(int value) {
    int hashIndex = value % 11;
    Hashnode* newNode = (Hashnode*)malloc(sizeof(Hashnode));
    newNode->next = NULL;
    newNode->value = value;

    // 修复空槽判断逻辑
    if (Hash[hashIndex].next == NULL) {
        Hash[hashIndex].next = newNode;
    } else {
        Hashnode* temp = Hash[hashIndex].next;
        // 修复尾插遍历逻辑
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
    }
}

void print() {
    Hashnode* temp;
    for (int i = 0; i < 11; i++) {
        temp = Hash[i].next;
        // 修复遍历条件,增加空链表判断
        while (temp != NULL) {
            printf("%d, %d\n", i, temp->value);
            temp = temp->next;
        }
    }
}

内容的提问来源于stack exchange,提问作者Hyeonbinshin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 04:36:06