数据结构-线性表

线性表

线性表是一种数据结构,其逻辑结构为线性结构;存储结构(实现)有两种:顺序、链式;对应的运算(操作)也略有不同:顺序表示可以随机访问,链式表示可以随机插入删除

线性表的定义和基本操作

线性表是具有相同类型的n(n>=0)个元素的有限序列,其中n为表长,当n=0时,该表为空表

若L命名为线性表,则一般表示为\(L=\\left(a\_{1}, a\_{2}, \\dots, a\_{i}, a\_{i+1}, \\dots, a\_{n}\\right)\)

线性表的特点

表中元素个数有限

表中元素具有逻辑上的顺序性,在序列中各个元素排序有其先后次序

表中元素都是数据元素,每个元素都是单个元素

表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间

表中元素具有抽象性,即讨论元素间一对一的逻辑关系,而不考虑元素究竟表示的内容

线性表是一种逻辑结构,表示元素之间一对一相邻的关系

线性表的基本操作

9种基本操作:初始化、销毁、增删改查、遍历、是否为空、获取长度

InitList(8L):初始化表。构造一个空的线性表 DestroyList(&L):销毁操作。销毁线性表,并释放线性表所占用的内存空间。 LocateElem(L,e)按值查找操作。在表中查找具有给定关键值得元素。 GetELem(L,i) 按位查找操作。获取表中第个位置的元素的值。 Listlnsert(&L,i,e)插入操作。在表中的第个位置上插入指定元素e插 LIstDelete(&L, &e):删除操作。删除表L中第个位置的元素,并用e返回删除元素的值。 Printlist(L):输出操作。按前后顺序输出线性表的所有元素值。 Empty(L):判空操作。若为空表,则返回TRUE否则返回ALSE。 Length(L):求表长。返回线性表的长度,即L中数据元素的个数。

线性表的顺序表示

顺序表的定义

线性表的顺序存储又称顺序表

一组地址连续存放的存储单元依次存放线性表的元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。

数组静态分配,数组动态分配(使用指针)

顺序表的基本操作

插入、删除、按值查找

线性表的链式表示

线性表的链式存储,简称链表

通过一组任意的存储单元来存储线性表中的数据元素,通过指针实现线性逻辑关系。

单链表

单链表的定义

带头节点的单链表和不带头节点的单链表

image-20200316185925947

带头节点单链表优点: 链表的第一个位置和其他位置的操作统一 空表和非空表的操作统一

单链表的基本操作

建立:头插、尾插

查找:按序号查找&按值查找

插入:按序号查找+插入(前插/后插)

前插与后插的转换:插入前交换节点内容

删除:按序号查找+删除

删除给定节点*p:交换节点内容+删除

表长

双链表

双链表可以看作是:一个带头节点的单链表+另一个不带头节点的单链表;所以其头节点并不能统一操作。

image-20200321134928900

插入

image-20200321135430055

删除

image-20200321135550537

循环链表

循环单链表

统一插入删除操作

image-20200321140308993

判空

image-20200321140626882

循环双链表

统一插入删除操作;找尾节点更快

image-20200321140412496

判空

image-20200321140700205

静态链表

使用数组实现链表

image-20200321141133827

顺序表和链表的对比

相同点

顺序表 单链表
逻辑结构 属于线性表 属于线性表

不同点

顺序表 单链表
存取方式 顺序存取、随机存取(计算位置直接存取) 顺序存取
物理结构(数据的存储) 数据元素 数据元素
物理结构(数据之间的关系) 数据元素之间的相邻性 下一个元素的指针
操作(插入,删除) O(n) 插入删除位置指针已知O(1),插入删除位置指针未知O(n)
操作(查找) 按值查找O(n),按序号查找O(1) 按值、按序号查找都是O(n)
内存空间 预分配(静态分配浪费空间,动态分配效率低) 按需分配,但指针使用额外空间

怎样选择线性表

顺序表 单链表
存储 规模难以估计 *
存储 存储密度大 *
效率 按序号访问 *
效率 插入和删除操作多 *
环境 基于数组 *
环境 基于指针 *

一些操作的实现

求最大最小值

置逆

顺序表置逆
image-20200322202739574
单链表置逆

将头部的节点依次插入到原尾节点后面

image-20200322203711682
image-20200322203827639

两路归并

合并两个有序线性表

顺序表两路归并

image-20200322204315858

单链表两路归并

image-20200322204629850
image-20200322204737429
image-20200322204852015

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注