|
2.2.2 顺序表中基本操作的实现
三、插入元素操作
首先分析,"插入元素"使线性表的逻辑结构发生什么变化?
假设在线性表的第i个元素之前插入一个元素e,使得线性表
(,
…, ,
,
…, )
改变为 (,
…, ,
e, ,
…, )
即:
(1) 改变了表中元素之间的关系,使< ,
> 改变为<,e>和<e,> |
|
|
|
|
算法
2.6
bool ListInsert(SqList &L, int pos, ElemType
e)
{
//
若存储空间不满且1≤pos≤Listlength(L)+1,则在顺序表 L 的
//
第 pos 个元素之前插入新的元素 e 且返回TRUE,否则返回FALSE
if (pos < 1 || pos > L.length+1) return FALSE ; //
插入位置不合法
if (L.length >= L.listsize) return FALSE;
// 当前存储空间已满,无法插入
for (j=L.length-1; j>=pos-1; --j)
L.elem[j+1] = L.elem[j]; //
插入位置及之后的元素右移
L.elem[pos-1] = e; //
插入 e
++L.length; //
表长增1
return TRUE;
} // ListInsert
此算法的时间复杂度为:O
(ListLength(L))
|
|
算法2.6演示的动画所示。
算法时间复杂度的分析:
算法中的基本操作是"移动元素",for 循环的执行次数在最坏的情况下(pos=1即插入在第一个元素之前时)为 L.length。
|
|