问答题 用C语言或PASCAL编写一用链接表(Linked List)解决冲突的哈希表插入函数。
【正确答案】
【答案解析】本题仍用上面已定义的存储结构。首先计算关键字K的哈希地址,若该哈希地址的头指针为空,则直接插入;否则,先在该链表上查找,若查找失败,则插入链表;若查找成功,则不再插入。
typedef struet node{
keytype key;
struct node *next;
}HSNode *HSList;
typedef struct node *HLK;
void Insert(HLK HT[], keytype K){ //用链接表解决冲突的哈希表插入函数
i=H(K); //计算关键字K的哈希地址
if(HT[i]==null) //关键字K所在链表为空
{s=(HSNode*)malloc(sizeof(HSNode)); s->key=k; s->next=HT[i]; HT[i]=s; }
else{ //在链表中查询关键字K
p=HT[i];
while(p && p->key !=k) p=p->next;
if(!p){ //链表中无关键字K,应该插入
s=(HSNode*)malloc(sizeof(HSNode));
s->next=HT[i];HT[i]=s;
} //插入后成为哈希地址为i的链表中的第一个结点
}
}