A-A+
写出从哈希法构造的散列表中删除关键字为k的一个记录的算法 设所有哈希函数为H 解决冲突的方法
问题详情
写出从哈希法构造的散列表中删除关键字为k的一个记录的算法,设所有哈希函数为H,解决冲突的方法是链地址法。
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:void Delete(LinkList*HTElemType key){ /*在哈希表HT中删除关键字key*/P=HT[H(key)];if(!p){print f(”表中无该元素\n”);exit(0);}if(p一>data==k) /*表中的一个元素*/{HT[H(key)]=P->nextfree(p);}else{ while(p&&p一>data!=k){q=p;P=P一>next;}if(p) /*查找成功*/( q一>next=P一>next;free(p);}else{printf(“表中无此元素\n”); exit(0);}}}
首先利用哈希函数关键字k的地址d,并在第d个单链表中查找值为k的关键字,若查找成功,则删除该结点。算法描述如下。