引入
我们知道,数据结构分为逻辑结构和物理结构
,线性表就是一种逻辑结构,那么线性表对应的物理存储结构是什么呢?如何操作这些存储结构呢?
线性表的物理存储结构
线性表有两种物理存储结构
- 顺序存储结构:顺序存储结构指的是一段地址
连续的存储
单元一次存储线性表中的数据元素。
我们很容易想到的就是数组,数组就是地址相连的一段元素,是顺序存储结构。 - 链式存储结构: 稍后详细介绍。
线性表的顺序存储结构
这节我们主要讲线性表的顺序存储结构,其实顺序存储结构在物理上的存储方式
就是:
- 在内存中找到一个初始地址
- 通过占位的形式,把一定的内存空间给占了
- 最后,把相同数据类型的数据元素依次放在这块空间里
线性表顺序存储的结构代码
1 |
|
上面的 ElemType 可以是
任何类型
,例子中我们把它当做整型。
顺序存储结构封装的三要素
根据上面的例子,我们总结了封装一个顺序存储结构的三要素:
- 起始位置:存储空间的起始位置,数组 data,它的存储位置是线性表存储空间的存储位置。
- 最大存储容量:数组长度是 MAXSIZE
- 当前长度:length
最大存储容量和当前长度的区别
最大存储容量:表示的是存放线性表空间的总长度,一般不变
当前长度:表示的是线性表当前存放的元素个数,随着插入/删除而改变。
顺序存储结构地址计算方法
对于顺序存储结构的第 i 个数据元素 ai 的存储位置可以由 a1推出
LOC(ai)=LOC(a1)+( i-1 )*c
其中
- LOC(a1)是 a1 的位置
- c 表示的是 ElemType 的字节长度(int 4字节)
- 第 i 个元素跟 a1 插 (i-1) 个 c ,所以 c*(i-1)
- 这样我们就可以推算出任何元素的位置了
时间复杂度:因为不管是第一个还是最后一个,我们只计算一次,所以时间复杂度为 O(1) 。
我们通常也称为随机存储结构
。
顺序存储结构中获取元素
我们知道了如何在众多元素中找到某一个元素的位置,那么我们就可以利用这一点,来获取第 i 个元素的值了。
1 |
|
主要就是一下几个思路:
- 输入:输入的是线性表、索引地址、存储地址
- 判断条件:线性表不为空、索引不为0或者负数、索引在线性表的长度范围内,也就是索引值合法。
- 输出:知道了索引位置,也知道了数据存储是从0开始的,所以索引位置的值应该是 i-1 ,也就是找到这个索引所对应的数组下标。
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。