如何在C中哈希双链表节点?

时间:2012-08-27 19:36:51

标签: c linked-list hash

我正在实施一个数据结构;项目在范围内的双重链表。我想在O(1)中找出一个项目是否存在。为此,我想散列密钥将成为项目和节点的节点。 value将是节点。

在Java中,有一些内置函数可以支持这种功能。

编辑:简而言之,我想在C中使用hashMap类的东西。

我应该怎么做才能在C中实现它?

2 个答案:

答案 0 :(得分:0)

如果您将项目存储在链接列表中,那么将它们存储在哈希中以进行包含测试似乎......不是最理想的。只需使用哈希表开始,如果需要不支持的操作(O(1)包含测试),请停止使用链表。

答案 1 :(得分:0)

创建一个名为“buckets”的数组,其中包含键和值,以及一个用于创建链接列表的可选指针。

使用密钥访问哈希表时,使用自定义哈希函数处理密钥,该函数将返回整数。然后取结果的模数,即数组索引或“桶”的位置。然后用存储的密钥检查未散列的密钥,如果匹配,则找到正确的位置。

否则,您遇到了“碰撞”,必须抓取链接列表并比较密钥,直到您匹配为止。 (注意一些实现使用二叉树而不是链表来进行冲突)。

查看这个快速哈希表实现:

http://attractivechaos.awardspace.com/khash.h.html