数据结构与算法(二):线性表的定义&顺序表

温习数据结构的基本框架:

数据结构与算法(二):线性表的定义&顺序表_第1张图片

线性表:具有相同特性数据元素(结点)的一个有限序列。

将非空的线性表记作:(a1,a2, ......, an); 对于不同的线性表,an所代表的含义也不同,但元素之间一定是线性关系,且开始结点和终端结点分别仅有一个,其中的内部结点一定有且仅有一个确定的前趋和后继。

数据结构与算法(二):线性表的定义&顺序表_第2张图片

案列引入

  1. 一元多项式的运算

  1. 稀疏多项式的运算:用链表更适合

  1. 图书信息管理系统

线性表的抽象数据类型的定义&基本操作举例

数据结构与算法(二):线性表的定义&顺序表_第3张图片
数据结构与算法(二):线性表的定义&顺序表_第4张图片
数据结构与算法(二):线性表的定义&顺序表_第5张图片
数据结构与算法(二):线性表的定义&顺序表_第6张图片
数据结构与算法(二):线性表的定义&顺序表_第7张图片
数据结构与算法(二):线性表的定义&顺序表_第8张图片
数据结构与算法(二):线性表的定义&顺序表_第9张图片

(traverse意思是遍历,遍历并不知道对每个元素需要进行哪方面的操作)

线性表的顺序表现和实现

顺序存储逻辑上相邻的元素在物理存储位置上也是相邻的;在存储时还要保证依次存储,地址连续,及中间没有空出存储单元。其中起始结点的地址称为基地址

优点:存储密度大/可以随机存取任一元素;

缺点:插入或删除时时间效率很低/可能会浪费存储空间/静态存储,元素个数不能自由扩充。

1)元素存储位置的计算:

数据结构与算法(二):线性表的定义&顺序表_第10张图片

优点:只要确定了基地址,其他任何数据元素的地址都是已知的,即是一种随机存取的存储结构。

2)用动态分配的一维数组描述顺序存储结构:(直接映射过去)

由于数组的长度不可动态定义,而线性表长度可变,最大存储空间不定,故而需要动态分配的一维数组:

可以理解为定义一个很大的数组,但只用一部分,用的那部分标注出来。

数据结构与算法(二):线性表的定义&顺序表_第11张图片

其中ElemType表示数组存储的是什么类型的变量,通常就是自己定义的结构体名;

elem[]也常写为*elem,故而实际上是以下两种:

数据结构与算法(二):线性表的定义&顺序表_第12张图片

注意逻辑顺序和物理位序下标是差1的,因为数组的第一个元素的下标是0。

3)顺序表示意图:

数据结构与算法(二):线性表的定义&顺序表_第13张图片

分为绿色部分和蓝色部分,绿色部分进行增添删除插入等等时蓝色跟着改变,即本质还是一个结构体。

4)顺序表基本操作的算法实现

数据结构与算法(二):线性表的定义&顺序表_第14张图片
数据结构与算法(二):线性表的定义&顺序表_第15张图片

status常是返回值类型;elemtype常是元素类型。

  1. 线性表的初始化

数据结构与算法(二):线性表的定义&顺序表_第16张图片

2.销毁线性表L,即将L从内存空间里删除:

数据结构与算法(二):线性表的定义&顺序表_第17张图片

3.清空线性表L,即只将L中的内容清空,L依然在内存里:

数据结构与算法(二):线性表的定义&顺序表_第18张图片

4.求线性表L的长度

数据结构与算法(二):线性表的定义&顺序表_第19张图片

5.判断线性表L是否为空

数据结构与算法(二):线性表的定义&顺序表_第20张图片

6.顺序表的取值(通过位置i来获得相应位置的数据元素的内容,赋给e并返回):

数据结构与算法(二):线性表的定义&顺序表_第21张图片

该算法体现了顺序结构最大的优点:随机存取

7.顺序表的查找:按值查找,即确定某个值存不存在,存在返回序号,不存在返回0

数据结构与算法(二):线性表的定义&顺序表_第22张图片

平均查找长度ASL(Average.Search Length):

为确定记录在表中的位置,需要与给定值进行比较的关键字的个数的期望值

数据结构与算法(二):线性表的定义&顺序表_第23张图片

即查找算法的平均时间复杂度为O(n),平均空间复杂度为S(1)

8.顺序表的插入:插入位置在最后/中间/最前:n个元素中,有n+1个能插入的位置;

异常处理:1.插入位置不合法(不在1~n+1的范围内) 2.插入溢出(length的值是否等于数组最大值);

往最后插最简单;往中间插入时,意思就是把原本的元素赋值给后一个位置里,从后往前后移,直至空出插入位置;而插入最前面时就是从后往前全体后移,空出第一个;

记得每插入一个元素,顺序表的长度就会加1,需要在L.length上体现(值也加1)。

数据结构与算法(二):线性表的定义&顺序表_第24张图片
数据结构与算法(二):线性表的定义&顺序表_第25张图片
数据结构与算法(二):线性表的定义&顺序表_第26张图片

即插入算法的平均时间复杂度为O(n),平均空间复杂度为S(1)

9.顺序表的删除:返回的是要删除元素的值;删除位置在最后/中间/最前;

异常处理:删除位置必须合法(1~n);

类似于插入,先删除使其位置变空,再将之后的元素从前到后依次前移,即后面的元素值赋给前面的;

记得每删除一个元素,顺序表的长度就会减1,需要在L.length上体现(值也减1)。

数据结构与算法(二):线性表的定义&顺序表_第27张图片
数据结构与算法(二):线性表的定义&顺序表_第28张图片
数据结构与算法(二):线性表的定义&顺序表_第29张图片

即删除算法的平均时间复杂度为O(n),平均空间复杂度为S(1)

参考网课:bilibili青岛大学--王卓

你可能感兴趣的:(数据结构)