1. 线性表
1.1 线性表概念和抽象数据类型
1、线性表是有穷个元素组成的序列,每个元素在表中有一个确定的位置,即下标。
2、表中含有元素的个数称为表的长度,显然空表长度为0。
3、表中元素之间存在着一个基本关系,即下一个关系,它是一种顺序关系。
4、在一个非空表中,存在着唯一的首元素和尾元素;除了首元素外,每个元素都有且仅有一个前驱元素;除了尾元素外,每个元素都有且仅有一个后继元素;
表抽象数据类型
'''
ADT list: #一个表抽象数据类型
List(self) #创建一个新表
is_empty(self) #判断self是否是一个空表
len(self) #获取表的长度
prepend(self,elem) #将元素elem加入表中作为第一个元素
append(self,elem) #将元素elem加入表中作为最后一个元素
insert(self,elem,i) #将elem元素加入表中作为第i个元素,其他元素顺序不变
del_first(self) #删除首元素
del_last(self) #删除尾元素
del(self,i) #删除第i个元素
searh(self,elem) #查询elem元素在表中出现的位置,不出现时返回-1
forall(self,op) #对表中每个元素执行操作op
'''
2 顺序表
2.1 顺序表的实现
顺序表的实现方式:表中元素顺序存放在一个足够大的连续存储区里,首元素存入存储区的开始位置,其余元素依次顺序存放。即元素之间的逻辑顺序关系通过元素在存储区里的物理顺序表示。
基本实现方式
1、存储
情况1:表中保存的元素类型相同,即每个元素的存储长度相同,可以等距存储,直接存储元素。
情况2:表中保存的元素类型不相同,将实际元素另行存储,在顺序表里保存对相应元素的引用信息,即保存的是对实际数据的索引。
2、创建
情况1:按照确定元素的个数,创建不变的顺序表,如tuple。
情况2创建变动的顺序表,必须区分表中元素个数和元素存储区的容量,即创建时分配一个更大的存储块。
顺序表的基本操作
1、创建和访问
创建空表:分配一块存储区,记录表的容量max和元素计数值num,num初始化为0.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CRPu9N0a-1576584349641)(03_1.png)]
简单判断操作:判断表空和表满,即表空的方法为当且仅当num=0,表满为当且仅当num=max,时间复杂度均为O(1)。
访问给定下标i的元素:需要先检查元素i是否在合法元素范围之内,不依赖于表中元素的个数,时间复杂度为O(1