关于链表初始化typedef struct LNode{}LNode,*linklist的理解

在严的数据结构(c语言版) 中看到一段伪代码:

typedef struct Node{
    ElemType data;//ElemType是本书约定的统一数据元素类型,简单理解成int吧
    struct LNode * next;
}LNode,*LinkList;

typedef的用法不在此细说,可以简单理解为给数据类型取别名。

对于这个代码,目的是定义线性表的单链表储存结构

结构体部分比较好理解,一个是数据元素data,一个是指向本结构体的结构体指针next。

关键在于LNode与*LinkList——

抽象出两个句子:
typedef struct Node LNode;
typedef struct Node* LinkList;

1、先说LNode,参照typede的用法,可以得知LNode就是struct Node1的别名,即LNode==struct Node;

2、再说LinkList,是一个指向该结构体的指针别名。其实这个*应该不是跟着LinkList,而是跟在Node后面的。

可以通过这样一个例子可以这样来理解
typedef struct int ElemType
typedef struct int* ElemTypePtr
第一个是 定义整型变量的别名 ElemType
第二个是 定义指向整型变量的指针的别名 ElemTypePtr

用起来的话就如下:

LNode A;//定义结构体变量A;
LinkList B;//定义指向结构体的指针变量B;

LNode 的对象都是结构体
LinkList 的对象都是结构体指针


  1. 该处严格遵守c语言的语法规则,必须是struct Node,但在C++中可以是Node。 ↩︎


版权声明:本文为qq_49301731原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。