本篇主要内容:
- 顺序表和链表的查找、插入、和删除算法、 链表的创建算法。
- 线性表应用的疮痈算法:线性表合并等。
- 从时间和空间的复杂度的角度,分析2种存储结构的特点、适用场合、优缺点
- 讨论线性表的逻辑结构、存储结构、相关运算。
- 线性表应用实例
1.定义与特点
线性表:
由n(n>=0)数据特性相同的元素构成的,有限序列。
可表示为(a0,a1,a2,…,an)
其实很好理解,
像c语言的数组、结构体构成的数组、字符串、
像python语言的列表、字典、元组
要注意的是:
每个数据元素,可以包含多个数据项,例如图书馆书籍列表,每一本书(数据元素)包括许多项信息:作者、出版社、、(数据项)
特点:
- 有唯一的“第一个”Data Element
- 有唯一的“最后一个”Data Element
- 除去第一个,其他Data Element只有一个前驱
- 出去最后一个,其他Data Elemnt只有一个后继
1.1引例
1.二十六字母的英文表
2.国外各国家疫情统计汇总
3.学生表
…
4.(书本中)一元多项式运算
多项式系数表示成一个线性表
那么多项式运算,也就是线性表对应元素相加(/相减)
5.稀疏多项式
所谓“稀疏” ,可以理解成毛发(项数)稀少…,且项数分布稀少
此时,用数据元素是一个二元组(有两个数据项),的线性表来表示
稀疏多项式做运算, 创建一个新组C,对应项相加,不对应的就新增。
小结:顺序存储vs链式存储
顺序存储,存储空间分配死板、运算的空间复杂度高。
正如稀疏多项式的表示(有2数据项的链式结构),不采用一元多项式的表示(数组)
2.线性表的ADT
Declaration:
ADT:
仅是一个模型的定义 ,不涉及具体实现
(不然为什么叫抽象数据类型呢?)
(如果实现了,那就是一个类了)
所以在ADT中,使用到的参数, 也不必考虑具体是哪个数据类型
ADT定义的的线性表:
根据实际所采用的存储结构形式,进行具体的表示和实现