//此理解有参考数据结构的教材和一些博主的文章;
1、先补充一下typedef在此处的基本用法:
typedef可用来建立已经定义好的数据类型的别名。形式为:typedef 已有变量名 别名;
通俗的来说就是给已有数据类型另起一个名字,如:
typedef int number;//把number抽象为int类型
number a=10;//对number类型(int)的变量进行赋值
//有关typedef的其它用法和详解此处不做说明
2、看下面代码 :
typedef int ElemType;//定义一个整型的ElemType类型
typedef struct Node
{
ElemType data;//节点数据域
struct Node*next;//节点指针域
}Node,*LinkList;
/*问:第五行中‘struct Node*next;’为什么要这样写?能不能写成int*next?*/
/*答:不行,next是指向下一个Node,而Node是struct Node类型。int *next 只能指向int,而不能指向Node。*/
第二行中typedef后面的所有,即‘struct Node’属于已有变量名 。{}后面的Node和LinkList都属于别名,别名也可以不写{}后面,可以写作下面这样:
typedef int ElemType;//定义一个整型的ElemType类型
typedef struct Node
{
ElemType data;//节点数据域
struct Node*next;//节点指针域
};
typedef struct Node Node;//'struct Node'是已有变量名,'Node'是别名
typedef struct Node*LinkList;//'struct Node*'是已有变量名,'LinkList'是别名
只是相比这种写法,第一种写法 更简洁优雅、可读性更高。两者是等效的,定义指向节点的指针时都可以直接写:
LinkList L;//定义指向结构体的指针变量L
Node的对象是结构体;
LinkList的对象是结构体指针;
希望能有所帮助,欢迎指出错误和不足之处。