2015-07-12 89 views
0

我想从哈希表中检索链接列表。从哈希表中获取链接列表C

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

所以我有一个struct代表的条目:

typedef struct Entry { 
    char *word; 
    int len; 
    struct Entry *next; 
} Entry; 

我做这些条目的数组作为我的表(我为表中的每个元素的malloc空间在我的计划):

struct Entry *table[TABLE_SIZE] = { NULL }; // an array of elements 

这是我的get函数。它接收哈希值,然后返回该位置处的链接列表。我相信我需要一个循环,但我不知道如何实现它。

struct Entry* getList(int h) { 
    // Return linked list 
    return table[h]; 
} 
+0

除非我误解了某些东西,否则就没有“整个列表”这样的东西。该列表只是其中的所有节点。 – immibis

+0

getList返回的条目的值是什么? – Andrey

+0

当我说整个列表时,我是指列表中的每个节点。 接下来返回一个指向下一个节点的指针。 – PTN

回答

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