青岛大学_王卓老师【数据结构与算法】Week02_11_线性表的顺序表示和实现6_学习笔记

本文是个人笔记,仅用于学习分享,素材来自青岛大学王卓老师的教学视频,如有侵权,请留言作删文处理。

王卓老师 数据结构与算法第 02 周第 11 个原视频链接

📚 Week02_11_线性表的顺序表示和实现6–删除算法

📚 Week02_11_01 顺序表的删除

在这里插入图片描述

(1) 删除位置在顺序表的最后面

在这里插入图片描述

(2) 删除位置在顺序表的中间

在这里插入图片描述

(3) 删除位置在顺序表的最前面

在这里插入图片描述

⚠️ 注意:删除顺序表的位置范围在:[0, n]
📚 Week02_11_02 顺序表的删除算法思想

线性表的删除运算是指在表的第 i (1 ≤ i ≤ n) 个结点,

使长度为 n 的线性表 (a1, a2, …, ai-1, ai, ai+1, …, an) 变成长度为 n - 1 的线性表 (a1, a2, …, ai-1, ai+1, …, an)

算法思想:

① 判断删除位置 i 是否合法(合法值是 1 ≤ i ≤ n)。

② 将欲删除的元素保留在 e 中。

③ 将第 i +1 至第 n 位的元素依次向前移动一个位置。

④ 表长减 1 ,删除成功返回 OK。

📚 Week02_11_03 顺序表的删除算法伪代码实现
Status ListDelete_Sq(SqList &L, int i)
{
    // (1)判断 i 值是否合法
    if(i < 1 || i > (L.length + 1))
        return ERROR;
    // (2)被删除元素之后的元素前移
    for(j = i; j <= L.length - 1; j++)
        L.elem[j-1] = L.elem[j];
    // (3)表长 -1
    L.length--;
    
    return OK;        
}
📚 Week02_11_04 顺序表的删除算法时间复杂度分析

算法时间主要耗费在移动元素的操作上:

⭐ 若删除尾结点,则根本无需移动(特别快);

⭐ 若删除首结点,则表中 n - 1 个元素全部前移(特别慢);

⭐ 若要考虑在各种位置删除(共 n 种可能)的平均移动次数,该如何计算?

各个位置都有可能删除,则每个位置删除的概率是 1 / n

删除第 1 个元素,需要移动 n - 1 个元素,平均移动次数:(n - 1) × ( 1 / n )

删除第 2 个元素,需要移动 n - 2 个元素,平均移动次数:(n - 2) × ( 1 / n )

删除第 3 个元素,需要移动 n - 3 个元素,平均移动次数:(n - 3) × ( 1 / n )

……

删除第 i 个元素,需要移动 n - i 个元素,平均移动次数:(n - i) × ( 1 / n )

……

则有:
在这里插入图片描述

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

学习笔记最后有微信公众号:惟CPP,欢迎关注,一起交流学习进步~

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值