gpt4 book ai didi

c - 在 C 中实现哈希表

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:57 25 4
gpt4 key购买 nike

我在用 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++;
}
}

我的想法是遍历列表的每个元素 (next->next) 并将 entry 的指针分配给最后一个元素 (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 {

....

关于c - 在 C 中实现哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10677484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com