当前位置: 首页 > news >正文

11. 线性表的顺序表示和实现(3)

本节主要介绍顺序表的查找、插入和删除操作。

本文部分ppt、视频截图来自:[青岛大学-王卓老师的个人空间-王卓老师个人主页-哔哩哔哩视频]

1. 顺序表上的查找操作

(1)什么是按值查找

给定一个值,顺序遍历线性表,看该值是否在线性表中,如果存在就返回元素位序,如果不存在,就返回0。

在这里插入图片描述

(2)顺序表的按值查找算法

  • 在线性表L中查找与指定值e相同的数据元素的位置
  • 从表的一端开始,逐个进行记录关键字和给定值的比较。找到,返回该元素的位置序号,未找到,返回0
//for语句实现:
int LocatedElem(SqList L,ElemType e){
//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)for(i = 0;i < L.length;i++)//查找成功,返回序号if(L.elem[i] == e)  return i+1;return 0; //查找失败,返回0
}//while语句实现
int LocatedElem(SqList L,ElemType e){
//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)i = 0;while (i < L.length && L.elem[i] != e)  i++;//查找成功,返回序号if(i < L.length)  return i+1;return 0; //查找失败,返回0
}

(3)顺序表的查找算法分析

  • 因为查找算法的基本操作为:记录的关键字同给定值进行比较
    在这里插入图片描述
  • 平均查找长度ASL(Average Search Length):
    为确定记录在表中的位置,需要与给定值进行比较的关键字的个数的期望值叫做算法的平均查找长度。如果e = g,那么平均查找长度为:(1 + 2 + 3 + 4 + 5 + 6 + 7) / 7 = 4
    在这里插入图片描述
    假设每个记录的查找概率相等: Pi = 1 / n
    则: ASLSS = \sum_{i=1}^{n}P_{i}C_{i}

2. 顺序表上的插入操作

(1)顺序表插入算法的思想

线性表的插入运算是指在表的第i(1≤i≤n+1)个位置上,插入一个新结点e,使长度为n的线性表(a1,…,ai-1,ai,…,an)变成长度为n+1的线性表(a1,…,ai-1,e,ai,…,an)

在这里插入图片描述

算法思想:

  1. 判断插入位置 i 是否合法。
  2. 判断顺序表的存储空间是否已满,若已满返回ERROR。
  3. 将第n至第ì 位的元素依次向后移动一个位置,空出第i个位置。
  4. 将要插入的新元素e放入第i个位置。
  5. 表长加1,插入成功返回OK。

(2)插入算法实现

Status ListInsert_Sq(SqList &L,int i,ElemType e){//i值不合法if(i < 1 || i > L.length+1)  return ERROR;//当前存储空间已满if(L.length == MAXSIZE) return ERROR;//插入位置及之后的元素后移for(j = L.length-1;j>=i-1;j--)L.elem[j+1] = L.elem[j];//将新元素e放入第i个位置L.elem[i-1] = e;//表长增1L.length++;return OK;
}

(3)顺序表插入算法分析

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

  • 若插入在尾结点之后,则根本无需移动(特别快);
  • 若插入在首结点之前,则表中元素全部后移(特别慢);
  • 若要考虑在各种位置插入(共n+1种可能)的平均移动次数,该如何计算?
    在这里插入图片描述
  • 顺序表插入算法的平均时间复杂度为O(n)。

2. 顺序表上的删除操作

(1)顺序表删除算法的思想

线性表的删除运算是指将表的第i(1 ≤ i ≤ n)个结点删除使长度为n 的线性表(a1, …, ai-1, ai,ai+1,…,an )变成长度为n-1的线性表(a1, …, ai-1, ai+1,…,an )

算法思想:

  1. 判断删除位置 i 是否合法(合法值为1 ≤ i ≤ n)。
  2. 将欲删除的元素保留在e中。
  3. 将第i+1至第 n 位的元素依次向前移动一个位置。
  4. 表长减1,删除成功返回OK。

(2)删除算法实现

Status ListDelete_Sq(SqList &L,int i){//i值不合法if((i < 1) || (i > L.length))  return ERROR;//被删除元素之后的元素前移for (j = i;j <= L.length - 1; j++)L.elem[j-1] = L.elem[j];//表长减1L.length--;return OK;
}

(3)顺序表删除算法分析

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

  • 若删除尾结点,则根本无需移动(特别快);
  • 若删除首结点,则表中 n-1个 元素全部前移(特别慢);
  • 若要考虑在各种位置删除(共 n 种可能)的平均移动次数,该如何计算?
    在这里插入图片描述
  • 顺序表删除算法的平均时间复杂度为O(n)。

3. 顺序表总结

  • 顺序表(线性表的顺序存储结构)的特点
  1. 利用数据元素的存储位置表示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构一致
  2. 在访问线性表时,可以快速地计算出任何一个数据元素的存储地址,因此可以粗略地认为,访问每个元素所花时间相等
    这种存取元素的方法被称为随机存取法
  • 线性表的基本操作

在这里插入图片描述

  • 顺序表的操作算法分析

在这里插入图片描述

  • 顺序表的优缺点

在这里插入图片描述

相关文章:

  • 新闻类鸿蒙应用全链路测试实践:性能、兼容性与体验的深度优化
  • 【多模态/T5】[特殊字符] 为什么视频生成模型还在用T5?聊聊模型选择的学问
  • 中兴B860AV1.1江苏移动-自动降级包
  • Spring MVC完全指南 - 从入门到精通
  • 电路板的 “双面绣”:猎板双色油墨如何重塑电子制造新范式
  • 线 性 数 据 结 构 双 雄:栈 与 队 列 的 原 理、实 现 与 应 用
  • HDFS 异构存储及存储策略
  • 《Linux C编程实战》笔记番外:如何避免子进程成为僵尸进程
  • 每日Prompt:人像写真
  • uni-app bitmap.load() 返回 code=-100
  • xilinx的gt的ALIGN_COMMA_WORD设置的作用
  • 鸿蒙新闻应用全链路优化实践:从内核重构到体验革新
  • 实时获取印度国家股票数据 API 实操
  • Explore Image Deblurring via Encoded Blur Kernel Space论文阅读
  • AIStor 的模型上下文协议 (MCP) 服务器: 工作原理
  • [Git] 配置 Git
  • 3D IC(立体集成电路)的生态机会
  • 多项目资源如何高效配置与再分配?
  • 【JavaAPI搜索引擎】项目测试报告
  • JSON 是什么?核心概念与语法解析
  • 唐山网站建设价格/霸屏推广
  • 宿迁做网站多少钱/黑帽seo优化推广
  • 高端网站建设收费为何比较贵/外贸公司一般怎么找客户
  • 大型网站如何做别名/windows优化大师会员
  • 邦拓网站建设/第三方平台推广引流
  • node.js做网站开发/软文的目的是什么