目录
2.struct LNode* next解释,为啥next定义成指针类型
在实现单链表的时候对于存储结构有些疑惑
对于
typedef struct LNode {
Book data; //数据域
struct LNode* next; //指针域
}LNode,*LinkList;
1.单链表的存储结构定义详细解释
有两个成员
- 一个是元素类型,叫data;
- 另一个next,是一个指向这种类型(LNode)的一个指针,是又包括两个成员的指针,自己来定义自己,嵌套定义。指针指向的变量(next)仍然是有data,有next两个成员
*Linklist是一个指针,指的是指向这个结点的指针,
- 习惯上Linklist强调是一个单链表的头指针,而LNode * 强调这是指向单链表任意一个节点的头指针
2.struct LNode* next解释,为啥next定义成指针类型
这里struct LNode* next是一个自引用结构体,相当于又定义了一个结构体,struct当然不能忽略!
定义next时使用指针是因为:
- 如果不加*的话,实际上是一个无限循环,成员next是一个结构体,next的内部还会有成员是结构体,依次下去,无限循环。在分配内存的时候,由于无限嵌套,也无法确定这个结构体的长度,所以这种方式是非法的。
- 但如果加上*的话,由于指针的长度是确定的(在32位机器上指针长度为4,指针的大小在具体的机器平台和编译器环境中都是已知的,不同的平台环境的定义不完全相同),所以编译器能够确定该结构体的长度。不会导致上述的递归死循环。是合法和可行的。