首先理一下对于学习数据结构很重要的基础知识。
比如,绝对理解下面的定义方式:
typedef struct LNode{
ElemType data;
struct LNode *next;
} LNode, *LinkList;
如果不理解,那你应该看看下面的:
struct LNode{
ElemType data;
struct LNode *next;
};
typedef struct LNode LNode;
typedef struct LNode *LinkList;
上面两种定义方式等价,第一种是实际中用到的,如果还不理解,那应该看看下面:
用typedef声明新类型名 有以下两种情况: 1、简单的用一个新的类型名代替原有的类型名 2、命名一个简单的类型名代替复杂的类型表示方法
结构体的用法:
不指定类型名而直接定义结构体类型变量
其一般形式为
struct
{
成员表列;
}变量名表列;
指定了一个无名的结构体类型,它没有名字(不出现结构体名)。显然不能再以此结构体类型去定义其他变量。
到这里应该很明白,我试图解释的是结构体和typedef的用法。
命名一个新的类型名代表结构体类型:
typedef struct
{ int month;
int day;
int year;
}Date;
以上声明了一个新类型名Date,代表上面的一个结构体类型。然后可以用新的类型名Date去定义变量,如:
Date birthday; //定义结构体类型变量birthday,不要写成struct Date birthday
Date * p; //定义结构体指针变量 p,指向此结构体类型数据
问:上面的和
struct
{ int m;
int d;
int y;
}Date;
一样么?
分析:前者的Date,按下文的说法,是一个结构体类型名;而后者显然是一个结构体变量名,它就相当于下面的birthday。这就是区别所在。