什么是顺序表
顺序表是指一段物理地址连续的存储单位存储数据的线性结构。
由于可以通过物理地址直接定位索引,所以获取顺序表中的某个元素所需的时间复杂度为O(1)。
两种顺序表的布局
顺序表有两种布局,一种是基本布局,一种是元素外置布局;
基本布局的顺序表存储的是同一类型的数据,即每个数据元素的占用的存储单元大小都是一样,所以对于该顺序表中元素的读取就可以依靠各个数据元素的物理地址偏移量;
元素外置顺序表:是指存储的数据的类型是不一样,导致数据元素占用存储单元的大小也就不一样,但是我们可以通过间接的方式实现顺序表(即将数据元素存储在其他地方,而在顺序表中记录他们的物理地址,数据读取时先通过顺序表读取到数据元素的物理地址,再从物理地址读取到数据元素)。
下图分别为顺序表的基本布局和元素外置布局;其中第一个图中的lo为顺序表的起始物理地址,c为数据元素占用存储单位的大小,第二图lo为顺序表的起始物理地址,c则为存储链接地址所需的存储量,一般这个很小。
顺序表的结构
一个顺序表的完整信息分为两部分:一部分是表中的元素集合;另一部分是为实现正确操作而需记录的信息,这部分信息包括元素存储区的容量和当前表中已有元素的元素个数两项(即数据区和表头信息)
顺序表有两种实现结构:一体式结构和分离式结构
一体式结构:顺序表信息和数据存储区连接在一起;
分离式结构:顺序表信息与数据存储区分开,顺序表信息多一个数据存储区的物理地址连接,来指向数据。
顺序表数据的更换
一体式结构:由于顺序表信息和数据区连续存储在一起,那么若想要更换数据,只能整体搬迁即整个顺序表对象改变;
分离式结构:若想要更换数据,只需更换顺序表信息中的数据区链接地址就行了,而该顺序表对象不变。
顺序表数据的扩充
1.线性扩充:每次扩充增加固定数目的存储位置,节省空间,操作次数多
2.倍数扩充:浪费空间,操作次数少,推荐.
两种可以看成:空间换取时间
python中使用顺序表实现数据结构
list和tuple两种类型采用了顺序表的实现技术
list是采用分离式结构,元素外置形式,倍数扩充的顺序表