线性表基础知识(三)

 线性表的顺序存储结构

用一组地址连续的存储单元依次存储线性表的元素。设线性表的每个元素占用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);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值