这是我的情况。我有一个哈希表和一个节点作为我的结构。节点具有指向其他节点(链接列表)的指针,哈希表是节点的数组。我将两个结构定义为:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
我已将链表中的最大节点数定义为32。每当我向链表中添加节点时,我都会检查链表的长度是否为32。如果长度为32,则我要添加另一个节点,我想删除链表中的第一个节点,然后将新节点添加到后面,例如FIFO队列。
我的问题是删除第一个节点。我认为最合理的事情是删除哈希表中的节点指针(即位于某个键(因为它是节点指针的数组)),而不是删除第一个节点,只是指向下一个被引用的节点如typedef struct node{
char* hashStr;
struct node* nextNode;
}node;
typedef struct hashTable{
int emptyNodes[16];
node* pods[16];
}hashTable;
中的nextNode
。不过我无法执行此操作,因为node struct
不是nextNode
。
我尝试过:
struct
我得到了错误:
(*addr).pods[key] = (*addr).pods[key].nextNode;
我了解该错误,但不确定如何解决。我在stackoverflow上找到了它,但是我不确定如何将其应用于我的工作(如果可以的话):
Why do I get "request for member in something not a struct or union" from this code?
答案 0 :(得分:2)
(*addr).pods[key] = (*addr).pods[key]->nextNode;
pods
是一个指针数组。一旦有了指针,就需要取消引用它以访问基础对象。
答案 1 :(得分:1)
更改此:
(*addr).pods[key].nextNode;
对此:
(*addr).pods[key]->nextNode;
因为pods[key]
的类型为node*
,即指向node
的指针。
答案 2 :(得分:1)
这里
node* pods[16];
pods[key]
是node*
类型。使用nextNode
访问pods[key]
时,请使用箭头->
运算符。对于例如
(*addr).pods[key]->nextNode