数据结构中结构定义中层级关系的理解

之前一直对数据结构中

1
2
3
4
5
typedef struct xxx
{
ElemType a;
struct xxx *b;
}xxx,*yyy;

*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