【考研数据结构——C语言描述】第二章 线性表顺序存储结构上的基本操作——顺序表的删除操作

25计算机考研,数据结构知识点整理(内容借鉴了王道408+数据结构教材),还会不断完善所整理的内容,后续的内容也会不断更新(可以关注),若有错误和不足欢迎各位朋友指出!

目录

一.删除操作

1.算法思想

2.算法描述

3.算法分析


一.删除操作

顺序表的删除运算是指在表的第i(1≤i≤n+1)元素删去,使长度为n的顺序表(e_{1},…,e_{i-1}e_{i},…,e_{n})变成长度为n1的顺序表(e_{1},…,e_{i-1}e_{i+1},…,e_{n})(其中n为L的表长度)。 

1.算法思想

用顺序表作为线性表的存储结构时,由于结点的物理顺序必须和结点的逻辑顺序保持一致,因此当需要删除第i个元素时,必须将原表中位置在i+1,i+2,…,n-1,n上的结点,依次前移到位置i,i+1,…n-1(其中n为的表长度)。

 

 

2.算法描述

int DelList(SeqList * L,int i,ElemType * e)
//在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L->last+1
{
 int k;
 if((i<1)||(i>L->last+1))
 {
    printf("删除位置不合法!");
    return( ERROR);
 }
   *e=L->elem[i-1];/*将删除的元素存放到e所指向的变量中*/
   for(k=i;i<=L->last;k++)
     L->elem[k-1]=L->elem[k];  //将后面的元素依次前移
 L->last--;
 return(OK);
}

3.算法分析

最好情况:当删除表尾(i=L->last+1)元素时,因为循环变量的初值大于终值,此时不需要移动元素,仅将表长度减1即可,时间复杂度为O(1)

最坏情况当删除表头元素(i=1)时,需要移动除表头元素以外的所有元素,移动元素的语句L->elem[k-1]=L->elem[k]需执行n-1次。因此,删除算法中移位语句L->elem[k-1]=L->elem[k]的执行频度与删除位置i有关时间复杂度为O(n)。因此,语句L->elem[k+1]=L->elem[k]的语句执行频度与插入位置i有关。

平均情况:E_{del}为在长度为n的表中删除一个元素所需移动元素的平均次数,假设Q_{i}为在第i个元素之前删除元素的概率,并假设在任何位置上删除的概率相等,Q_{i}=1/(n+1),i=1,2,n+1,则有

 因此,顺序表的删除算法的平均时间复杂度为O(n) 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值