在 C 的 HashTable 中插入具有串联的方法

Insert method with concatenation in a HashTable in C

我在用 C 实现哈希 Table 的插入方法时遇到问题。以下代码行简要概述了我的程序结构:

struct someStruct{
    struct someStruct *next;
};

typedef struct someStruct Ele;

typedef struct someStruct *EleP;

typedef EleP HTEntry;

struct symbolTable {
    HTEntry hashTable[CON];
};

在我的程序中,hashTable 包含在其他两个数据结构中,我认为这两个数据结构对于此描述并不重要,唯一重要的是访问 hashTable 我需要做如下:

Var->anotherVar->hashTable

鉴于上面的定义,我的问题是当我尝试将一个元素插入到散列中时Table 似乎我没有使用指针并且修改在内存中没有任何反射。如果我执行以下操作:

EleP toAdd = [...]
Var->anotherVar->hashTable[key] = toAdd;

这很好用,但是,如果我想将任何新元素与旧元素连接起来,我无法反映内存中的变化,似乎我复制的是值而不是引用。这里的代码:

HTEntry w = Var->anotherVar->hashTable[key];
while(w != NULL){
    w = w->next;
}
w = toAdd;

如果我尝试在执行插入的函数中打印 w 的值,我会得到正确的元素,但是当函数 returns 时,该值不在 table 中。我想找出丢失的指针在哪里,但我真的不知道。

编辑: Eyal提出的解决方案其实是允许向hastTable中添加元素,但是,元素是添加到key+5中,而不是添加到key中。有什么建议吗?

你的逻辑不正确。您正在将 w(现在为 NULL)设置为 toAdd。您应该设置前一个元素的 w->next = toAdd

尝试

HTEntry w = Var->anotherVar->hashTable[key];
while(w != NULL && w->next != NULL){
    w = w->next;
}
if (w != NULL) w->next = toAdd;