第二章 线性表
一、线性表及其逻辑特征
1.线性表定义
(1)线性表简称表,是n个具有相同类型的数据元素的有限序列,L=(a1,a2,……an)
(2)线性表中数据元素的个数称为线性表的长度
(3)长度为0的线性表称为空表
(4)线性表是一种最基本、最简单的数据结构,数据元素之间仅具有单一的前驱和后继关系,且每个元素最多只有一个前驱和一个后继
2.线性表的逻辑特征
相邻元素具有前驱和后继关系
3.线性表的存储结构
顺序存储结构 --> 顺序表 --> 连续存储单元 --> 随机存取,存储密度大
链式存储结构 --> 链表 --> 任意存储单元 --> 顺序存取,插入删除方便
二、线性表的基本操作及ADT描述
1.线性表的基本操作
初始化表,销毁表,求表长,按位查找,按值查找,插入元素,删除元素,判空操作,遍历元素
2.线性表的ADT描述
省略
三、线性表的顺序存储结构
1.线性表的顺序存储结构称为顺序表
2.顺序表是用一段地址连续的存储单元依次存储线性表的数据元素
3.线性表中数据元素的序号(逻辑位置)从1开始,数组的下标从0开始,即线性表中第i个元素存储在数组中下标为i-1的位置
4.数组的长度必须要大于线性表的长度,MaxSize>length
5.每个元素占用c个存储单元,顺序表中元素ai的存储地址:LOC(ai)=LOC(a1)+(i-1)*c
6.随机存取结构:只要确定了存储顺序表的起始地址,计算任意一个元素的存储地址的时间都是相等的,这一特点的存储结构~~
7.顺序表的特点:元素的序号与数组中存储该元素的下标一一对应,即逻辑上相邻,则其物理位置也一定相邻
四、线性表的链式存储结构
1.单链表
(1)单链表是用一组任意的存储单元存放线性表的元素,这组存储单元可以连续也可以不连续,甚至可以零散分布在内存中的任意位置
(2)结点:每个存储单元必须存储数据元素和后继元素的地址信息(指针),这两部分组成了数据元素的存储映像,称为~~,即结点包括数据域(data)和指针域(next)
(3)单链表:单链表是通过每个结点的指针域将线性表的数据元素按其逻辑次序链接在一起,由于每个结点只有一个指针域,故称为~~
(4)带头结点的单链表:每个结点的存储地址存放在其前驱结点的next域中,而开始结点无前驱,终端结点无后继,所以可在开始结点之前附设一个头结点,并用头指针指向头结点,终端结点指针域为NULL,无论单链表是否为空,头指针始终指向头结点,整个单链表的存取都必须从头指针开始进行,头指针具有标识一个单链表的作用
(5)单向链表的存储密度小于1
2.循环链表
将单链表中终端结点的指针域由空指针改为指向头结点,形成一个头尾相接的环,这种单链表称为循环单链表,简称循环链表
图为带尾指针的循环链表
3.双链表
在单链表的基础上,给每个结点增加一个前驱指针域,就形成了双链表
4.循环双链表
将双链表的头结点和尾结点链接起来形成循环双链表
图为带头结点的循环双链表
(1)循环双链表的插入操作
s->prior=p;
s->next=p->next;
p->next->prior=s;
p->next=s;
(2)循环双链表的删除操作
p->prior->next=p->next;
p->next->prior=p->prior;
五、线性表的其他存储结构
1.静态链表
静态链表是用数组来描述单链表,用数组元素的下标来模拟单链表的指针(称为游标)
静态链表在插入和删除操作时,只需要修改游标,不需要移动表中的元素
2.间接寻址
间接寻址是将数组中存储数据元素的单元改为存储指向该元素的指针
间接寻址保持了顺序表随机存取的优点,同时改进了插入和删除操作的时间性能