【发布时间】:2018-07-21 16:02:48
【问题描述】:
我在用 C 语言实现哈希表的插入方法时遇到问题。以下代码行简要概述了我的程序的结构:
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
鉴于上述定义,我的问题是,当我尝试将元素插入 hashTable 时,似乎我没有使用指针,并且修改在内存中没有任何形式的反映。如果我执行以下操作,它会起作用:
EleP toAdd = [...]
Var->anotherVar->hashTable[key] = toAdd;
这很好,但是,如果我想将任何新元素与旧元素连接起来,我无法反映内存中的变化,看来我是在复制值而不是引用。代码如下:
HTEntry w = Var->anotherVar->hashTable[key];
while(w != NULL){
w = w->next;
}
w = toAdd;
如果我尝试在执行插入的函数中打印 w 的值,我会得到正确的元素,但是当函数返回时,该值不在表中。我试图找出丢失的指针在哪里,但我真的不知道。
编辑: Eyal 提出的解决方案实际上允许向 hastTable 添加元素,但是,元素被添加到 key+5 而不是 key。有什么建议吗?
【问题讨论】: