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。