由于我们数数都是从1开始数的,线性表的定义也不能免俗,起始也是 1,可C语言中的数组却是从0开始第一个下标的,于是线性表的第i个元素是要存储在数组下标为i-1的位置,即数据元素的序号和存放它的数组下标之间存在对应关系(如图3-4-3所示)。
    image.png
    用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除操作,因此分配的数组空间要大于等于当前线性表的长度。

    其实,内存中的地址,就和图书馆或电影院里的座位一样,都是有编号的。存储器中的每个存储单元都有自己的编号,这个编号称为地址。当我们占座后,占座的第一个位置确定后,后面的位置都是可以计算的。 由于每个数据元素,不管它是整型、实型还是字符型,它都是需要占用 一定的存储单元空间的。假设占用的是c个存储单元,那么线性表中第i +1个数据元素的存储位置和第i个数据元素的存储位置满足下列关系(LOC表示获得存储位置的函数)。
    LOC(ai+1)=LOC(ai)+c

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

    从图3-4-4来理解:
    image.png
    通过这个公式,你可以随时算出线性表中任意位置的地址,不管它是第一个还是最后一个,都是相同的时间。那么我们对每个线性表位置的存入或者取出数据,对于计算机来说都是相等的时间,也就是一个常数,因此用我们算法中学到的时间复杂度的概念来说,它的存取时间性能为O(1)。我们通常把具有这一特点的存储结构称为随机存取结构。