【发布时间】:2021-11-29 03:12:41
【问题描述】:
对不起,如果标题有点混乱,作为 C 的初学者,我真的不知道该怎么说。所以我试图创建一个单链表,其中每个节点不仅有一个指向下一个节点的指针,还有一个指向从该节点开始的子链表的指针。基本上每个节点都有自己的链表。在尝试创建此 LL 时,我有一个结构,其中包含每个节点应具有的特征,例如指向下一个节点的指针和指向源自它的数据链表的指针。我听说你实际上能够制作一个结构的结构。我想创建第二个结构来构造节点所持有的数据类型:
struct NODE{
void* data;
struct Node* next;
}NODE;
typedef struct stuff{
int data1;
int data2;
int data3;
}STUFF;
我现在的问题是,如果说我有一个来自 struct NODE 的节点,例如“NODE* 节点”,我将如何引用该节点的数据类型(data1、data2 等)?我试过铸造,但不确定我是否做错了,但类似这样:
(STUFF)node->data1= DATA1;
//where DATA1 is of course already defined to be some int
我在函数内部执行此操作,但收到错误消息“强制转换是非法的,不支持左值转换”。
【问题讨论】:
-
不清楚您所说的“子链表”是什么意思。您似乎在描述
struct stuff类型的东西,除了 not 看起来像一个列表节点。您是否尝试将此结构打包在void*中?请构建一个示例列表及其内容来说明您要执行的操作。听起来您想要一个链表,其中每个节点的data成员指向另一个struct NODE(作为子列表),并且每个 那些 节点都有它们的data成员指向struct stuff值。对吗? -
NODE 和 Node 类型有什么区别? Node在哪里定义?
-
基本上我想创建一个单链表,与基本 LL 相比,每个节点只有一条数据,这个 LL 的节点有多个数据(data1、data2 等)。 )
-
那你为什么不使用 STUFF 类型的指针而不是 void 呢?
-
你是@uwu的同学吗?见this question。