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

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

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

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

案列引入

  1. 一元多项式的运算

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

  1. 图书信息管理系统

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

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

线性表的顺序表现和实现

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

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

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

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

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

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

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

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

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

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

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

3)顺序表示意图:

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

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

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

  1. 线性表的初始化

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

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

4.求线性表L的长度

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值