从哈希表C中获取链表

时间:2015-07-12 22:56:52

标签: c linked-list hashtable

我正在尝试从哈希表中检索链接列表。

我的代码现在只抓取链表的第一个节点。我如何获得整个列表?返回类型应该是什么?

所以我有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];
}

1 个答案:

答案 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;
}