大话数据结构 —— 3.4 线性表的顺序存储结构

目录

3.4.1 顺序存储定义

3.4.2 顺序存储方式

3.4.3 数据长度与线性表长度区别

3.4.4 地址计算方法


3.4.1 顺序存储定义

线性表有两种物理存储结构:顺序存储结构和链式存储结构。


线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

线性表(a1,a2....,an)的顺序存储如下:

大家有没发现是不是跟数组一样的?

物理上的存储方式事实上就是在内存中找个初始地址,

然后通过占位的形式,把一定的内存空间给占了,  

然后把相同数据类型的数据元素依次放在这块空地中。

比如在电影院买了票,就算空着位置,也没有人会坐上去。这就是顺序存储结构的特性之一。

 

 

3.4.2 顺序存储方式

接下来看线性表顺序存储的结构代码。

#define MAXSIZE 20  // 存储空间初始分配量
typedef int ElemType;  // ElemType类型根据实际情况定,这里假设为int
typedef struct
{
    ElemType data[MAXSIZE];  // 数组存储数据元素,最大值为MAXSIZE
    int length;  // 线性表当前长度
}SqList;

大家看到了,这里我们封装了一个结构,事实上就是对数组进行封装,增加了个当前长度的变量罢了。

 

总结下,顺序存储结构封装需要三个属性:

  • 存储空间的起始位置: 数组data,它的存储位置就是线性表存储空间的存储位置。
  • 线性表的最大存储容量: 数组的长度MaxSize。
  • 线性表的当前长度: length。

 

 

3.4.3 数据长度与线性表长度区别

注意,数组的长度与线性表的当前长度需要区分一下: 

数组的长度是存放线性表的存储空间的总长度,一般初始化后不变。

而线性表的当前长度是线性表中元素的个数,是会变化的。
 

 

 

3.4.4 地址计算方法

      线性表的定义充分考虑到很多军师级别领导的智商指数,所以决定从1开始回归正常思维。
      假设ElemType占用的是C个存储单元(字节),那么线性表中第1+1个数据元素和第i个数据元素的存储位置的关系是(LOC表示获得存储位置的函数):

LOC(ai+1) = LOC(ai) + C

所以对于第1个数据元素ai的存储位置可以由a1推算得出:LOC(ai) = LOC(a1) + (i-1)*c

结合下图来理解:

通过这个公式,我们可以随时计算出线性表中任意位置的地址,不管它是第一个还是最后一个,都是相同的时间。那么它的存储时间性能当然就为0(1),我们通常称为随机存储结构。

你可能感兴趣的:(★,Data,Structure)