- 全国计算机等级考试教程:二级公共基础与C语言
- 董琴 邵洪成 陈瑾 孙久 严长虹
- 964字
- 2021-03-31 07:36:33
1.1.5 线性链表
1.线性链表的基本概念
线性表的链式存储结构称为线性链表。为了存储线性表中的每一个元素,一方面要存储数据元素的值,另一方面要存储各数据元素之间的前后件关系。为此,将存储空间中的每一个存储结点分为两部分:一部分用于存储数据元素的值,称为数据域,另一部分用于存放下一个数据元素的存储序号,即指向后件结点,称为指针域。在线性链表中,用一个专门的指针head指向线性链表中的第一个数据元素的结点,线性表中最后一个元素没有后件,因此,线性链表中最后一个结点的指针为空,用NULL或0表示,表示链表终止。
在线性链表中,各数据元素之间的前后件关系是由各结点的指针域来指示的,指向线性表中第一个结点的指针head称为头指针,当head=NULL(或0)时称为空表。对于线性链表,可以从头指针开始,沿各结点的指针扫描到链表中的所有结点。
①线性单链表。在这种链表中,每一个结点只有一个指针域,由这个指针只能找到后件结点,但不能找到前件结点,即在线性单链表中,只能顺指针向链尾方面进行扫描,如图1-1-10所示。
图1-1-10 线性单链表
②双向链表。线性链表中的每个结点设置两个指针,一个称为左指针(Llink),用以指向其前件结点;另一个称为右指针(Rlink),用以指向其后件结点,如图1-1-11所示。
图1-1-11 双向链表
2.线性链表的基本运算
(1)在线性链表中查找指定元素
在线性链表中查找包含指定元素值的前一个结点,当找到包含指定元素的前一个结点时,就可以在该结点后插入新结点或删除该结点后的一个结点。
(2)线性链表的插入
在线性链表中插入一个新元素,首先要给该元素分配一个新结点,以便用于存储该元素的值,新结点可以从可利用栈中取得,然后将存放新元素值的结点链接到线性链表中指定的位置。
【例1-1-6】单链表的插入运算,如图1-1-12所示。
图1-1-12 单链表的插入
(3)线性链表的删除
在线性链表中删除包含指定元素的结点,首先要在线性链表中找到这个结点,然后将要删除的结点放回到可利用栈。
【例1-1-7】单链表的删除运算,要求删除结点ai,如图1-1-13所示。
图1-1-13 单链表的删除
3.循环链表及其基本运算
循环链表(见图1-1-14)的结构与线性链表相比,具有以下两个特点:
①在循环链表中增加了一个表头结点,循环链表的头指针指向表头结点。
②循环链表中最后一个结点的指针域不是空,而是指向表头结点。
循环链表的基本运算主要有插入和删除,循环链表的插入和删除的方法与线性单链表基本相同。
图1-1-14 循环链表