顺序表
顺序表的基本布局
由图可知,元素的下标存储的是该元素的逻辑地址,而元素存储存的物理地址,可以通过存储区起始地址L0进行逻辑计算而获得
Loc(ei)=loc(e0)+e*i
由此可见,访问元素的时候不需要从头遍历,只需要进行相应的逻辑计算获得物理地址,即可访问。
顺序表的结构
最基本的顺序表由两部分组成,一部分是表中的元素集合,而另一部分是用来存放顺序表的整体信息,这部分信息包括表的容量以及当前表已有元素的个数
顺序表的两种基本实现方式
一体式结构
上图即是一体式结构基本模型,假如我们需要存放一个列表,该列表有四个元素,而图中的表可以存放五个,自然可以轻易的存放进去,但是如果现在增加列表的元素呢?
很显然现在该表只能存放5个数据,而列表元素增加到6个,该表已经放不下了,这是我们只能向内存重新申请一个更大的数据表才能存放下列表元素
当申请了新的顺序表之后,就可以进行数据迁移了,但是此时的表头物理地址也会相应的该表,如果你用原来的物理地址查表内元素已经查找不到了
*所以一体式结构的优缺点非常明显,优点是查找元素速度快,缺点是存储容量是有限个的,如果超出表的容量,就需要向内存申请新的空间进行数据迁移
分离式结构
为应对一体式结构的缺点,就有了分离式结构的诞生,它可以动态的分配内存空间,不会出现一体式结构那样的超出容量的情况:
分离式结构将数据与表内信息两部分分离开,表内信息中存放了表的容量,已有元素个数和第一个数据的物理地址
这种结构的好处是当你的表的容量不够的时候,可以直接在表的首位添加内存空间,因为两部分原本就是分离开的,表数据表的首位依然可以添加内存构成连续的地址空间,如下图
可见分离式结构可以直接在数据存储区的收尾添加内存空间,实现动态存储!