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;
)。
经过几天的重写和移动部分代码后,我似乎仍然找不到解决方案。
您应该首先尝试实现链接列表。
这是我如何在末尾添加内容(我修改了您的代码,而您只覆盖了临时的“ 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)
....