如何在C中添加到单独的链接哈希表中的链表中

如何在C中添加到单独的链接哈希表中的链表中,c,linked-list,hashtable,symbol-table,C,Linked List,Hashtable,Symbol Table,以下是我的问题的相关结构 //A SymEntry is the building block for linked lists of (name, attribute) pairs typedef struct SymEntry { char * name; void * attribute; struct SymEntry * next; } SymEntry; /* Each symbol table is represented by a SymTab size is th

以下是我的问题的相关结构

//A SymEntry is the building block for linked lists of (name, attribute) pairs
typedef struct SymEntry {
  char * name;
  void * attribute;
  struct SymEntry * next;
} SymEntry;

/*
Each symbol table is represented by a SymTab
size is the current number of lists in the separate chaining hash table
contents is an array of lists (i.e. points to the zeroth element in the array)
if current is not NULL it points to the current (name, attribute) pair in the symbol table
*/
  typedef struct {
    int size;
    SymEntry ** contents;
    SymEntry *current;
  } SymTab;
我有一个用c创建符号表的项目。我们将实现一个单独的链式哈希表来实现这一点。我相信我正确地创建了初始的空哈希表。下面是我对此的实现

SymTab * createSymTab(int size) {
  int i;  
  SymTab *symbolTable = malloc(sizeof(SymTab));
  symbolTable->contents = (SymEntry**)malloc(size * sizeof(SymEntry));
  symbolTable->current = (SymEntry*)malloc(sizeof(SymEntry));
  symbolTable->size = size;

  for (i=0; i<size; i++) {
    SymEntry *newEntry = malloc(sizeof(SymEntry));
    newEntry -> name = NULL;
    newEntry -> attribute = NULL;
    newEntry -> next = NULL;
    
    symbolTable->contents[i] = newEntry;
    
  }
  symbolTable->current = NULL;
  return symbolTable;
}
最后,下面的代码是我用来测试的。如果我对每件事的理解都是正确的,那么应该打印的名字是Jess,我的第二个条目,但我只看到Wes。这两个名称散列为相同的数字,在本例中为5。当我向列表中添加节点(SymEntry)时,我到底做错了什么?当我添加Jess时,我的输出识别出头部不是空的,所以我知道第一个条目是有效的

int main(void) {
  SymTab * symbolTable = createSymTab(6);
  enterName(symbolTable, "wes");
  enterName(symbolTable, "jess");
  SymEntry * example = symbolTable->contents[5];
  printf("%s\n", example->name);
  return 0;
}

head=newNode。那不能满足你的需要
head
只是一个局部变量,因此语句不会将
newNode
链接到哈希表中。如果检查
table->contents[hashNum]
,无论添加多少节点,都会看到它始终是相同的值。此外,我建议您重新构造代码,将
表->内容[hashNum]
初始化为NULL,而不是将其转换为具有空
名称
字段的节点。感谢您的评论!帮助我理解并解决了这个问题。
int main(void) {
  SymTab * symbolTable = createSymTab(6);
  enterName(symbolTable, "wes");
  enterName(symbolTable, "jess");
  SymEntry * example = symbolTable->contents[5];
  printf("%s\n", example->name);
  return 0;
}