在C中实现哈希表

thp*_*rus 0 c pointers hashtable linked-list

我在用C实现一个简单列表时遇到麻烦,问题是通过指针连接项目。
下面的代码是哈希表的一部分,该哈希表应将具有相同索引的项目存储在列表中,以避免发生冲突。

typedef struct dictEntry {
    void *key;
    void *value;
    struct dictEntry *next;
} dictEntry;

typedef struct dict {
    dictEntry **table;
    unsigned long size;
    unsigned long used;
} dict;

void dictAdd(dict *d, void *key, void *value) {
    int index = hash(key) & d->size;
    dictEntry *entry;

    entry = malloc(sizeof(entry));

    entry->key   = key;
    entry->value = value;
    entry->next  = 0;

    if (d->table[index]) {
        /* this is does not work */
        dictEntry *next;
        next = d->table[index];

        while (next) {
            next = next->next;
        }

        next = entry;
    } else {
        d->table[index] = entry;
        d->used++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的想法是遍历列表(next->next)的每个元素,然后将的指针分配给entry最后一个元素(next = entry;)。
经过几天的重写和移动部分代码后,我似乎仍然找不到解决方案。

Vik*_*pov 5

您应该首先尝试实现链接列表。

这是我如何在末尾添加内容(我修改了您的代码,而您只覆盖了临时的“ next”变量而不修改列表本身):

if (d->table[index]) {
    /* this should work*/
    dictEntry *next;
    dictEntry *prev = NULL;
    next = d->table[index];

    while (next) {
        prev = next;
        next = next->next;
    }

    // yes, add new entry as the "next" pointer to the "last" item
    prev->next = entry;
} else {
Run Code Online (Sandbox Code Playgroud)

....