为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2018-07-05 10:10:28
typedef int ElemType;typedef struct Node{ElemType data;struct Node *next;}Node;typedef struct Node *LinkList;
查看完整描述

3 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

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

查看完整回答
反对 回复 2018-07-08
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

每个Node是一个结构体,包含两个元素,第一个元素是ElemType类型的data,第二个元素是Node指针类型。so what?

查看完整回答
反对 回复 2018-07-08
?
慕标5832272

TA贡献1966条经验 获得超4个赞

不知道你的疑惑是不是 为什么在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并没有定义完,编译器都不知道要给他分配多少内存空间。

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


查看完整回答
反对 回复 2018-07-08
  • 3 回答
  • 0 关注
  • 518 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信