C语言实现哈希链时赋值NULL报错:类型不兼容问题求助
解决哈希链实现中的类型不兼容错误
错误原因
你定义的chain是node(即struct hashNode)类型的数组,每个元素是完整的结构体实例,但NULL是指针类型(void*),C语言不允许将指针直接赋值给结构体变量,因此触发类型不兼容错误。
解决方案
哈希链(链接法)的核心是每个哈希桶存储链表的头指针,而非直接存储结构体。因此需要将数组类型修改为指针数组:
修改后的完整代码:
#include<stdio.h> #include<stdlib.h> #define size 10 typedef struct hashNode { int data; struct hashNode *next; } node; int main() { // 将数组改为指针数组,每个元素是指向node结构体的指针 node *chain[size]; // 初始化每个哈希桶的头指针为NULL,表示空链表 for(int i=0; i<size; i++) chain[i] = NULL; // 后续可以实现insert函数,向对应哈希桶的链表中插入节点 // insert(chain, 10); return 0; }
补充说明
修改后,chain[i]作为链表的头指针,当需要插入元素时,只需为新节点分配内存,然后将其挂载到对应桶的链表头部(或尾部),这完全符合链接法处理哈希冲突的逻辑。
内容的提问来源于stack exchange,提问作者Debbie
相关产品推荐
相关产品推荐

