我是Hash tables概念的新手。我正在尝试创建一个非常简单的哈希表来理解这个概念。我已经理解了如何为哈希的目的创建基本哈希函数。但是我不明白如何将它链接到表的其余部分。我对如何开始创建表,查找函数,删除表中的条目等感到困惑。
哈希函数看起来像7。
DBAUTH="user1 user1password user2 user2password ... userN userNpassword"
但是我不了解其他部分,比如如何创建表,查找等等。
请有人帮助我。我感谢任何帮助。
答案 0 :(得分:1)
非常简单地通过将数据分成较小的存储单元(称为存储桶)来放置哈希表。这些内部存储单元由索引访问,索引是存储在存储桶内的值的哈希码。请注意值中的s。您需要能够在一个存储桶中存储多个值以支持哈希码冲突。
因此,哈希表需要进行一些基本操作。
话虽这么说,你需要实现这些桶。简单地说你需要一份清单清单。对于第一层,您需要一些支持索引访问的集合。由于您使用C,因此可以使用简单的数组。我建议你不要为你的桶使用整数范围的整数(你可以这样做,但这会让你更难理解和调试)。只需应用模运算即可正确缩小哈希码的范围。对于第二部分,我建议使用链式列表来支持动态增长。
因此,您可以根据数组索引找到链接列表,然后处理链接列表中的每个项目以查找正确的项目。这也说明了为什么散列冲突会降低散列表的效率。如果没有哈希冲突,您只需要一个测试来查找项目,这是时间常数。如果您有哈希冲突,则需要检查多个值。
哈希冲突是返回相同哈希码的两个不同值。
希望能让您知道如何开始。不要听任何人听。 C是一种非常棒的语言,可以开始使用。
答案 1 :(得分:1)
基本概念很简单:
因此,当您想要写入数据时:index = hash_function(); array[index] = data.
类似于读取。
一旦您阅读了有关哈希表的更多信息,您将了解其余内容。
答案 2 :(得分:0)
而是告诉你如何编码,我会告诉你你想要学习的字段的名称:Data Structures and Algorithms
关于此问题的大多数书籍都将为您提供有关如何创建哈希表的示例。我的建议,从比C更容易的语言开始,得到概念,然后回到C.