赞
踩
结构体就是一种构造数据类型。
我们的生活因素十分复杂,C提供的数据类型有时并不能满足我们的需求,比如学生管理,每个学生有学号,姓名,年龄等等,我们每个学生的信息都单独存储未免太过繁琐。C语言就允许程序员可以自定义数据类型方便解决问题。
在单链表中,每个结点都有两部分构成:
data 数据域:用来存放该结点的数据
*next 指针域:用来存放于该结点相邻的下一个结点的地址
由于每个结点都是相同的构造,所以可以构造结构体:
struct Node
{
datatype data; //data数据域
struct Node *next; //*next指针域
}
而结构体变量的定义略显麻烦:
struct Node demo; //定义一个该结构体变量demo,demo中存在两个上述区域
C语言提供了一种很方便的方法:typedef 可以为已有的数据类型定义别名
比如把int类型重命名为a,b
typedef int a,b;
a num1; //相当于int num1;
b num2; //相当于int num2;
那么自定义的结构体数据类型当然也可以定义别名
typedef struct Node
{
int data;
struct Node *next;
} Node, *LinkList;
上述代码将该结构体重命名为Node
将指向该结构体的指针重命名为LinkList
目的是为了使用方便和增加可读性
在C中指针变量的定义就是在变量名前加一个’ * ',比如
int *p; //定义一个int型指针p,可以指向int型变量的地址
同理,该结构体重命名为Node后
Node *demo; //定义一个Node型指针demo,可以指向Node型数据的地址
而同时设置结构体指针变量名为LinkList,其实是为了提高代码的可读性,当我们创建新链表定义指针时
LinkList L; // 定义表头指针L
Node *p; //新进结点指针p
我们可以较清晰的理解L和p具体指的什么,而实质上,上述两个指针变量的定义是同等类型的指针变量,只是名字不同罢了,比如
Node *L;
Node *p;
但是这样的话很明显代码的可读性就不如直接用LinkList代表链表表头指针,Node*代表结点指针,既方便自己编写,也方便他人阅读。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。