当前位置:   article > 正文

借单链表结点理解结构体和指针_为什么在使用链表时没有定义一个结构体

为什么在使用链表时没有定义一个结构体

结点结构体

结构体就是一种构造数据类型

我们的生活因素十分复杂,C提供的数据类型有时并不能满足我们的需求,比如学生管理,每个学生有学号,姓名,年龄等等,我们每个学生的信息都单独存储未免太过繁琐。C语言就允许程序员可以自定义数据类型方便解决问题。

单链表中,每个结点都有两部分构成:

data 数据域:用来存放该结点的数据
*next 指针域:用来存放于该结点相邻的下一个结点的地址

由于每个结点都是相同的构造,所以可以构造结构体:

struct Node
{
	datatype data;    //data数据域
	struct Node *next;    //*next指针域
}
  • 1
  • 2
  • 3
  • 4
  • 5

结构体变量的定义略显麻烦:

struct Node demo;    //定义一个该结构体变量demo,demo中存在两个上述区域
  • 1

C语言提供了一种很方便的方法:typedef 可以为已有的数据类型定义别名
比如把int类型重命名为a,b

typedef int a,b;
a num1;    //相当于int num1;
b num2;    //相当于int num2;
  • 1
  • 2
  • 3

那么自定义的结构体数据类型当然也可以定义别名

typedef struct Node
{
	int data;
	struct Node *next;
 } Node, *LinkList;
  • 1
  • 2
  • 3
  • 4
  • 5

上述代码将该结构体重命名为Node
将指向该结构体的指针重命名为LinkList

目的是为了使用方便和增加可读性

在C中指针变量的定义就是在变量名前加一个’ * ',比如

int *p;    //定义一个int型指针p,可以指向int型变量的地址
  • 1

同理,该结构体重命名为Node后

Node *demo;    //定义一个Node型指针demo,可以指向Node型数据的地址
  • 1

而同时设置结构体指针变量名为LinkList,其实是为了提高代码的可读性,当我们创建新链表定义指针时

LinkList L;    // 定义表头指针L 
Node *p;    //新进结点指针p 
  • 1
  • 2

我们可以较清晰的理解L和p具体指的什么,而实质上,上述两个指针变量的定义是同等类型的指针变量,只是名字不同罢了,比如

Node *L;
Node *p;
  • 1
  • 2

但是这样的话很明显代码的可读性就不如直接用LinkList代表链表表头指针,Node*代表结点指针,既方便自己编写,也方便他人阅读。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/429843
推荐阅读
相关标签
  

闽ICP备14008679号