数据结构中栈树之类的结构体为什么要命名为两个名字

typedef struct StackNode {
    SElemType data;
    struct StackNode *next;
} StackNode, *LinkStack;

开始接触数据结构时纠结其中栈的结构体为何要命名为StackNode, *LinkStack;

这是因为前面是struct StackNode类型,后面是struct StackNode*指针类型,名字不同只是为了区分类型,例如LinkStack可以作为链表头节点的指针,代表这个链表,而每个StackNode实际上就是这个链表的节点对象。

typedef struct BiTNode{
    TElemType data;
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

BiTNode 是 struct BiTNode的别名,有了这个定义在C语言中可以用BiTNode 代替struct BiTNode,而*BiTree 是在定义结构体之后又定义了一个类型为BiTNode的指针变量