一. 顺序表的基本形式
顺序表: 将元素有序的存放在一块连续的存储区里面,元素间的顺序关系由他们的存储顺序自然表示。
顺序表的基本形式
a : 每个元素所占的存储单元大小固定相同
b: 每个元素所占的存储单元大小不相同,存储一个链接地址
二. 顺序表的结构与实现
- 顺序表的结构:
一个顺序表的完整信息包括:
1) 表中元素的集合
2) 表的整体信息: 元素存储区的容量和元素的个数
- 顺序表的基本实现方式
1) 一体式存储:
存储: 存储表的信息的单元与元素存储区以连接的方式 安排在一块存储区里。
存储区替换: 要想更换数据区,只能整体搬迁,即整个顺序表对象都改变了。
2)分离式存储:
存储: 存储表信息的单元与元素存储区以连续的方式安排在两块存储区里。
存储区替换:要想更换数据区,只需将表信息区中的数据区链接地址更新就可以了。
存储区扩容: 只有分离式结构的元素存储区才可以扩容
扩容策略:
(1) 每次扩充增加固定数目的存储位置,如每次扩充增加 10个元素位置,这种策略可以称作是线性增长。
特点: 节省空间,但是扩充操作频繁,操作次数多
(2) 每次扩充容量加倍,如每次扩充增加一倍存储空间
特点: 减少扩充操作执行次数,但可能会浪费空间资源,以空间换时间
三. 顺序表的操作
- 增加元素
1) 表的尾端增加。 直接在表的尾端增加元素即可。 时间复杂度: O(1)
2) 非保序增加 。 增加的元素在表中,将增加处的元素发放到最后,将要增加的元素,方法需要增加的位置。时间复杂度 O(1)
3) 保序增加。 将元素插入顺序表中,然后插入的元素每个都向后移动。 时间复杂度 O(n)
- 顺序表的删除
1)删除表尾元素: 直接将表尾元素删除 ,时间复杂度是O(1)
- 非保序的元素删除。
3) 保序的元素删除。将顺序表的中间元素删除,后面的元素都要补上来,时间复杂度是
O(n)
- python中的顺序表
在python 中,list 和 tuple 两种类型采用的是顺序表的实现技术
list 是可变类型,即采用分离式技术实现的动态顺序表
tuple 是不可变类型,即是不可改变的顺序表
python标准类型 list 就是一种元素个数可变的线性表,可以加入和删除元素
1) 顺序表: 基于下标的高效元素访问和更新,时间 复杂度为O(1)
2) 分离式技术 : 允许任意加入元素,而且在不断加入元素的过程中表对象的识别id 不变list 的元素存储区扩容的原则:
1) 在建立空表(或者很小的表)的时侯,系统分配一块能容纳8个元素的储存区
2) 在执行插入操作(insert 或者append)的时候,如果元素存储区满了就换一块四倍大的存储区。
3) 如果此时的表已经很大了,则采用加一倍的方法。 因为为了笔迷爱你出现过多空闲的存储位置