第二章 线性表
在数据元素的非空有限集中:
(1)存在唯一一个被称作“第一个”的数据元素;
(2)存在唯一一个被称作“最后一个”的数据元素;
(3)除第一个之外,集合中的每个数据元素均只有一个前驱;
(4)除最后一个之外,集合中每个元素均只有一个后继。
2.1 线性表的类型定义
线性表(linear_list) 是n个数据元素的有限序列。
线性表 --> 文件file
数据元素 --> 记录 record
数据项 -->
线性表中的数据元素可以是各种各样的,但同一线性表中的元素必定具有相同特性,即属同一对象。
相邻数据元素之间存在着序偶(ordered pair)关系。
直接前驱
直接后继
线性表中元素的个数n定义为线性表的长度,n=0时称为空表。
i称为位序
基本操作:
InitList
DestroyList
ClearList
ListEmpty
ListLength
GetElem
LocateElem
PriorElem
NextElem
ListInsert
ListDelete
ListTraverse
2.2 线性表的顺序表示和实现
用一组地址连续的存储单元依次存储线性表的数据元素。
是线性表的第一个数据元素的存储位置,通常称作线性表的起始位置或基地址。
随机存取
顺序表,用数组表示。
2.3 线性表的链式表示和实现
顺序表:随机存取
链表:插入、删除
线性链表/单链表:用一组任意的存储单元存储线性表的数据元素。
|--数据域
|--指针域
头指针指向头结点,头结点指向首结点。
头结点的数据域可以不存储任何信息,也可以存储如线性表的长度等类的信息。
在单链表中,取得第i个数据元素必须从头指针出发寻找,因此,单链表是非随机存取的存储结构。
静态链表:
用一维数组来描述线性链表
方便于在不设指针类型的高级程序设计语言中使用链表结构。
数组的一个分量表示一个结点,同时用游标(指示器cur)代替指针指示结点在数组中的相对位置。数组的第零分量可看成头节点,其指针域指示链表的第一个结点。
为了辨明数组中哪些分量未被使用,解决的办法是将所有未被使用过以及被删除的分量用游标链成一个备用的链表,每当进行插入时便可从备用链表上取得第一个结点作为待插入的新结点;反之,在删除时将从链表中删除下来的结点链接到备用链表上。
循环链表 circular linked list:
表中最后一个结点的指针域指向头结点,整个链表形成一个环。
通常为,仅设尾指针的循环链表。
双向链表 double linked list:
结点中有两个指针域,其一指向直接后继,另一指向直接前驱。
2.4 线性表的应用——一元多项式的表示及相加