【发布时间】:2018-10-26 15:09:23
【问题描述】:
这是我的情况。我有一个哈希表和一个节点作为我的结构。节点具有指向其他节点的指针(链表),哈希表是节点数组。我将这两种结构定义为:
typedef struct node{
char* hashStr;
struct node* nextNode;
}node;
typedef struct hashTable{
int emptyNodes[16];
node* pods[16];
}hashTable;
我已将链表中的最大节点数定义为 32。每当我将节点添加到链表时,我都会检查链表的长度是否为 32。如果长度为 32,我想添加另一个节点,我想删除链表中的第一个节点,并将新节点添加到后面,就像一个先进先出队列。
我的问题是删除第一个节点。与其删除第一个节点,我认为最合理的做法是将节点指针放在 hashTable 中(即在某个键处(因为它是节点指针的数组)),只需指向下一个被引用的节点作为node struct 中的nextNode。我不能这样做,因为nextNode 不是struct。
我试过了:
(*addr).pods[key] = (*addr).pods[key].nextNode;
我得到错误:
error: request for member 'nextNode' in something not a structure or union
我了解该错误,但我不确定如何修复它。我在 stackoverflow 上找到了这个,但我不确定如何将它应用到我的工作中(如果可以的话):
Why do I get "request for member in something not a struct or union" from this code?
【问题讨论】:
-
pods[key]是一个指针。您需要使用pods[key]->nextNode。 -
您宁愿得到错误,因为您使用的项目是 not 结构。仔细阅读编译器错误。正确的代码应该是
addr->pods[key] = addr->pods[key]->nextNode;
标签: c