我正在尝试从哈希表中检索链接列表。
我的代码现在只抓取链表的第一个节点。我如何获得整个列表?返回类型应该是什么?
所以我有struct
代表一个条目:
typedef struct Entry {
char *word;
int len;
struct Entry *next;
} Entry;
我将这些条目的数组作为我的表格(我在程序中为表格的每个元素设置了malloc空格):
struct Entry *table[TABLE_SIZE] = { NULL }; // an array of elements
这是我的获取功能。它接收哈希值,然后返回该位置的链表。我相信我需要一个循环,但我真的不知道如何实现它。
struct Entry* getList(int h) {
// Return linked list
return table[h];
}
答案 0 :(得分:4)
散列表是无序的,因此如果您允许重复输入,则返回的值通常是未指定。返回整个列表可能没有意义,因为散列到同一位置的值不一定相等,或以任何方式相关(取决于数据和散列函数)。
哈希表使用两个函数。第一个是哈希,第二个是相等。您可能想要的是以下内容。
Entry* find_entry(const char* key)
{
int hpos = hasher(key) % TABLE_SIZE;
Entry* p;
for (p = table[hpos]; p != NULL; p = p->next)
if (is_equal(p->word, key))
return p;
return NULL;
}