线性表的顺序存储结构,值得是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表的顺序存储结构,说白了,就是在内存中找了块儿地放,通过占位的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地中。
既然线性表的每个数据元素类型都相同,所以可以用一维数组来实现顺序存储结构,即把第一个数据元素放在数组下标为0的位置,接着把线性表相邻的元素存储在数组中相邻的位置。
线性表的顺序存储结构需要三个属性:
- 存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置;
- 线性表的最大存储容量:数组长度MaxSize;
- 线性表的当前长度:length
由于每个数据元素,不管它是整型、实型、还是字符型,它都是需要占用一定的存储单元空间的。
假设占用的是c个存储单元,那么线性表中第i+1个数据元素的存储位置和第i个数据元素的存储位置满足:
L
o
c
(
a
i
+
1
)
=
L
o
c
(
a
i
)
+
c
Loc(a_{i+1})=Loc(a_i)+c
Loc(ai+1)=Loc(ai)+c
所以,对于第i个数据元素
a
i
a_i
ai的存储位置可以由
a
−
1
a-1
a−1t推算得出:
L
o
c
(
a
i
)
=
L
o
c
(
a
1
)
+
(
i
−
1
)
∗
c
Loc(a_i)=Loc(a_1)+(i-1)*c
Loc(ai)=Loc(a1)+(i−1)∗c
如果我们要实现ListInsert(*L,i,e),即在线性表L中的第i个位置插入新元素e,应该如何操作?
插入算法的思路:
- 如果插入位置不合理,抛出异常;
- 如果线性表长度大于等于数组长度,则抛出异常,或者动态增加容量;
- 从最后一个元素开始向前遍历到第i个位置,分别将它们都向后移动一个位置;
- 将要插入元素填入到位置i处;
- 表长加1.
例:
来了一个人要插在队伍中的第三位,这时,第三位及第三位之后的,都要向后移动一个位置。
删除算法的思路:
- 如果插入位置不合理,抛出异常;
- 取出删除元素
- 从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
- 表长减1.