2.2.2 顺序表中基本操作的实现
四、删除元素操作
同样首先分析,"删除元素"使线性表的逻辑结构发生什么变化?
假设删除线性表中第i个元素,使得线性表
(
,…,
,
,
,…,
) 改变为 (
,…,
,
,…,
)
即:
(1) 改变了表中元素之间的关系,使<
,
>和<
,
> 改变为<
,
>
(2) 表长减1
对顺序表而言,需要改变从第 i+1 个元素起到第 n 个元素的存储位置,即进行"
从第 i+1 到第 n 个元素往前移动一个位置
"。
算法 2.7
bool
ListDelete(SqList
&
L,
int
pos, ElemType
&
e)
{
//
若1≤pos≤Listlength(L),则以 e 带回从顺序表 L 中删除的
//
第 pos 个元素且返回 TRUE,否则返回 FALSE
if
((pos < 1) || (pos > L.length))
return FALSE
;
//
删除位置不合法
for
(j = pos; j<L.length; ++j)
L.elem[j-1] = L.elem[j];
//
被删除元素之后的元素左移
算法2.7演示的动画所示。
--L.length;
//
表长减1
return TRUE
;
}
//
ListDelete
此算法的
时间复杂度
为:
O
(ListLength(L))
算法时间复杂度的分析:
算法中的基本操作是"移动元素",for循环的执行次数在最坏的情况下(pos=1即删除第一个元素时)为L.length-1。