数据结构-线性表

线性表

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

线性表的定义和基本操作

线性表是具有相同类型的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