之前一直对数据结构中
1 | typedef struct xxx |
中*yyy一处与xxx的关系感觉比较迷茫,这里整理一下。
关于struct xxx
显式使用struct xxx的原因在于需要在struct结构体中嵌套定义一个下级同数据类型节点的指针,而在这个结构体的定义过程中,struct xxx = xxx这个结构是定义完成后才生效的,在定义过程中要引用这个数据结构则必须先用struct xxx这种形式,所以需要显式定义一个struct xxx。
关于后面的*yyy
在定义后面跟一个*yyy表示的是yyy是xxx的指针型的别名(yyy=*xxx),而非是*yyy=xxx【有点绕】
通过下图解释:
以二叉树为例
BiTNode是二叉树的数据节点

左右的变量为指向下面一个数据节点的指针,这个指向数据节点的指针(*BiTNode)又是一个子树(BiTree)
而对整个二叉树,也是由一个指向BiTNode的指针定义的,也就是整个二叉树也可以表示为一个BiTree的数据类型。
总而言之,上面的解释可以总结为,一个数据结构的整体可以由一个指向基础数据节点(头结点)的指针表示。
最后补一个问题,就是在函数传参时有时候需要传入一个*BiTree,这是因为如果传BiTree即*BiTNode时,则函数中只能更改指向子树内存里的内容,也就是下面子树中的数据,必须传*BiTree才能更改上面结构中*lChild是指向一个子树还是指向一个Null