为什么下面这个数据结构里把结构体声明为Node,结构体中的指针域也是一个Node

发布于 2022-09-04 23:48:28 字数 140 浏览 22 评论 0

typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *next;
}Node;
typedef struct Node *LinkList;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

漫漫岁月 2022-09-11 23:48:28

不知道你的疑惑是不是 为什么在Node还没有定义完的情况下我们就能用Node *next作为它的元素?
如果你是问这个的话,我倒是可以说说我的看法。因为c语言中指针都是占32bit或者64bit的数据,在同一个系统中,指针占用的内存空间都是一样的。所以在编译阶段,

typedef struct Node
{
ElemType data;
struct Node *next;
}Node;

typedef struct Node
{
ElemType data;
xxx *next;
}Node;

是等效的,struct Node *next;xxx *next;都是一个占32bit或者64bit的数据类型。只有在后面使用Node后,struct Node *next;xxx *next;才会有区别。
你可以试试这样,

typedef struct Node
{
ElemType data;
struct Node next;
}Node;

就是next不是指针,而就是Node。这就会报错

error: field ‘next’ has incomplete type

因为这个时候Node并没有定义完,编译器都不知道要给他分配多少内存空间。

如果你想问的不是这个,那就忽略我的回答吧。

首先,应该是要建立一个链表。那么你结构体内部必须要有一个指针指向下一个节点的地址。而结构体内部的 struct Node *next; 就充当了这一个角色

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文