【发布时间】:2018-03-13 22:10:00
【问题描述】:
大家好,过去几天我一直在阅读 C 语言中的指针、结构和数据结构。现在我正在尝试按照本教程在 C 中实现哈希表:https://www.tutorialspoint.com/data_structures_algorithms/hash_table_program_in_c.htm
但是,tutorialspoint 假设只有 1 个哈希表,并且它正在使其成为全球性的。此外,tutorialspoint 不考虑碰撞。
我想创建一个不将自己限制为单个哈希表的结构,并且我计划将链接(以处理冲突)与链表结合起来。我有以下内容:
typedef struct node {
int key;
int data;
struct node* next;
} node;
typedef struct linkedList{
node* head;
node* tail;
size_t size;
} linkedList;
typedef struct hashTable{
//perhaps an array of linked list? This member is what I need help with
//And other potential members I am overlooking
size_t size
} hashTable;
我需要解释的一些事情:
节点结构用作一对键/数据,它有一个指向具有相同哈希码的下一对的指针。所有具有相同哈希码的节点都将在同一个链表中。
linkedList 结构表示一个链表,最终将成为哈希表中的一行。所有链表都将成为哈希表中的一行。
hashTable 结构包含所有的linkedList。
如何在我的 hashTable 结构中创建一个linkedList 结构的数组?在我的 3 个结构中是否还有其他我忽略的成员?
感谢任何帮助!
附:我打算使用我在 Linked List 程序中编写的方法。这是它的早期版本的链接:https://codereview.stackexchange.com/questions/176904/my-linked-list-implementation-in-c
【问题讨论】:
-
你的结构的成员是完全任意的,需要反映你想要使用的元素。我建议您可以考虑将
size、data和 key 组合到一个结构中,除非它们不相关。 (看来它们来自您显示的代码)。通常,密钥用于从加密对象中捕获某些内容。散列后的东西无法恢复,为什么需要密钥? -
@rykker 结构对(我从 item 重命名,以清除问题)结构意味着包含其数据和密钥的对。 hashTable 结构是包含对的实际哈希表。所以我并不是说这些是相关的。
-
@rykker 我编辑了 OP。也许 HashMap 是我想要完成的一个更好的名字?该程序旨在将值存储在表中,然后允许通过键进行东访问。用户应该能够恢复在我的表中插入的内容。
-
"所有具有相同键的节点都将在同一个链表中。" -- 哈希表中的键是唯一的。您的意思是具有相同哈希码的所有节点。
-
@M Oehm 是的!我是那个意思!谢谢!
标签: c linked-list hashtable