线性表的顺序存储结构
用一组地址连续的存储单元依次存储线性表的元素。设线性表的每个元素占用k个存储单元,则第i个元素ai的存储位置为:
Loc(ai)=Loc(a1)+(i-1)*k 其中,Loc(ai)为线性表的起址
线性表顺序存储结构的定义为:
CONST maxlen=线性表可能达到的最大长度
TYPE sqlisttp=RECORD
elem:ARRAY[1...maxlen] OF elemtp:
last: 0...maxlen END
在上述描述中,线性表的顺序存储结构是一个记录型的结构。
其中,数据域elem描述了线性表中的DE占用的数组空间,数组的第i个分量为线性表中第i个DE的存储映像;
数据域last指示最后一个DE在数组空间中的位置,也是表长.
线性表顺序存储结构的插入操作
例子
插入运算INSERT(L,i,b)
插入前:L=(a1,...ai-1,ai,...an);
插入后:L=(a1,...ai-1,b,ai,...an);
算法思想:
1.进行合法性检查,1<i<=n+1;
2.检查线性表是否已满;
3.将第n个至第i个元素逐一后移一个单元;
4.在第i个位置处插入新元素;
5.将表的长度加1;
算法描述
PROCins_sqlist(VAR v:sqlisttp;i:integer;b:elemtp);
{在顺序存储结构的线性表v中第i个DE之前插入b}
IF (i<1) OR(i>v.last+1)
THEN ERROR('i值不合法');
ELSE IF v.last>=maxlen
THEN ERROR('表满溢出')
ELSE FOR j:=v.last DOWNTO i DO
v.elem[j+1]:=v.elem[j];{右移}
v.elem[i]:=b;
v.last:=v.last+1;
ENDP;{ins_sqlist}
时间复杂度分析
最坏情况是在第1个元素前插入(i=1),此时,要后移n个元素,因此此算法的时间复杂度为:
T(n) = O(n);