1.线性表(linear list)
线性表: 是一种数据结构, 一个线性表是n个具有相同特性的数据元素的有限序列
线性表的实际存储方式,分为两种实现模型:顺序表和链表
2.顺序表
- 申请连续的存储空间
- 依次存入数据
- 数据之间有顺序关系
- 取数据时根据下标(偏移量),一步计算出对应的内存地址
- 时间复杂度是O(1)
3.顺序表基本形式
- 顺序表的基本布局
Loc(ei) = Loc(e0) + c*i
元素存储的物理地址(实际内存地址) = 存储区的起始位置 + 逻辑地址(第i个元素)*存储单元大小
- 元素外置的顺序表
元素的大小不统一
使用了元素外置,能存不同的数据类型
此时存储存储单元大小(c)不在是数据元素的大小,而是存储一个链接地址的大小
4.顺序表的结构
操作部分包含元素存储区的容量和元素个数两项
5. 顺序表的基本实现方式
-
一体式结构
存储表信息单元与元素存储区连续在一起
优点:整体性强,易于管
缺点:元素存储区创建后便固定了 -
分离式结构
图b为分离式结构,表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联。 -
使用了分离式结构,添加数据时,id永远不发生变化
6.动态顺序表
- 分离式结构动态顺序表:
若将数据区更换为存储空间更大的区域,则可以在不改变表对象的前提下对其数据存储区进行了扩充,所有使用这个表的地方都不必修改。
6.1 线性扩充
每次扩充增加固定数目的存储位置,如每次扩充增加10个元素位置,这种策略可称为线性增长。
特点:节省空间,但是扩充操作频繁,操作次数多。
6.2倍数扩充
每次扩充容量加倍,如每次扩充增加一倍存储空间。
特点:减少了扩充操作的执行次数,但可能会浪费空间资源。以空间换时间,推荐的方式。
7.python顺序表
list —> 元素个数可变的线性表
tuple —> 不变的顺序表
dict --> 哈希表
list就是一种采用分离式技术实现的动态顺序表。用list.append(x) (或 list.insert(len(list), x),即尾部插入)比在指定位置插入元素效率高的原因。