c语言哈希表链地址法问题

我写了个代码,链地址法处理冲突的哈希表,在插入元素InsertHashTable函数的冲突处理的时候有问题。求大神指教

//向哈希表中插入元素
void InsertHashTable(HashTable *H,T cell)
{
int p=Hash(cell);
if(H->cell[p].x_==0&&H->cell[p].y_==0)
{
H->cell[p]=cell;
}
else
{
T *temp;
temp->x_=cell.x_;
temp->y_=cell.y_;
temp->next=H->cell[p].next;
H->cell[p].next=temp;//前插
}
H->sizeindex=H->sizeindex+1;
}//InsertHashTable

结构体的成员x_和y_保存的是什么?

你的

int p=Hash(cell);

找到所项后,因为该项中要有一个链保存一系列元素,所以该链应为一指向hash元素的指针。

判断条件因为该项是否为NULL,若为NULL(地址不冲突),否则冲突,执行的是链表的插入操作,插入到前后首位随你意愿(一般插前边)。

追问

我确实是按照你说的写的,编译也能通过,但是运行时会程序崩溃,可以给个方便点的方式联系你吗?

追答

运行时候崩溃常见的就是指针指向错误。

你插入的时候是不是用malloc动态申请了空间

T *temp;
temp=(T *)malloc(sizeof(T));

之后再将temp插入链表。

你具体的结构定义我不知道,你可以去图书馆借国外的数据结构相关的书。

看下他们怎么实现,也可以在网上找点其他人的资料

温馨提示:答案为网友推荐,仅供参考