数据结构(七)——线性表的基本操作

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓csdn2023年后端赛道第第七
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓csdn2023年长沙赛道第一
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓csdn2023年大二赛道第二
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营
获得国家荣誉3项省级荣誉7项以及多项校院级

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

  • 数据结构(八)——线性表的基本操作
    • 操作中常用的预定义常量与类型
      • 初始化(分配空间;赋初值)
      • 销毁线性表
      • 线性表置空/清空线性表
      • 求表长
      • 判断线性表是否为空
    • 查找算法的算法分析
    • 插入算法
      • 插入算法的算法分析
      • 删除操作
        • 删除算法分析
    • 线性表的小结;
    • 线性表的优缺点
      • 优点
      • 缺点

数据结构(八)——线性表的基本操作

操作中常用的预定义常量与类型

img

初始化(分配空间;赋初值)

img

销毁线性表

img

线性表置空/清空线性表

img

求表长

img

判断线性表是否为空

img

线性表的按值查找算法(这里我们先说最简单的顺序查找,后面就详细讲解)

img

img

查找算法的算法分析

查找算法的基本操作:将记录的关键字同给定值进行比较(L.elem==e)

img

比较的次数与输入的定值e有关(假设7个数字出现的概率均为1/7)

当e=a,1次;当e=b,2次;当e=c,3次;…e=g,7次

平均比较次数(1+2+3+…+7)/7=4

在查找时,为确定元素在顺序表中的位置,需和给定值进行比较的数据元素个数的期望值称为查找算法在查找成功时的平均查找长度(AverageSearch Length, ASL)

img

从顺序表查找的过程可见,C取决于所查元素在表中的位置。例如,查找表中第一个记录时,仅需比较一次;而査找表中最后一个记录时,则需比较n次。一般情况下C等于i。假设每个元素的查找概率相等,即

image-20230917095612708

可简化为

image-20230917095635879

由此可见,顺序表按值查找算法的平均时间复杂度为O(n)。

插入算法

img

在这里插入图片描述

插入位置在最后在线性表的最后添加一个元素不需要移动直接添加
插入位置在最前在原线性表的第1个元素之前插入一个新的元素,线性表的所有元素都要移动移动次数最多
插入位置中间如上例

img

插入算法的算法分析

img

删除操作

img

①判断删除位置i是否合法(合法值为1≤i≤n)
②将欲删除的元素保留在e当中
③将第i+l个至第n个的元素依次向前移动一个位置(i= n时无需移动)
④表长减1

img

删除算法分析

img

线性表的小结;

查找、插入、删除的平均算法复杂度为O(n)

空间复杂度显然顺序表操作没有占用辅助空间算法的空间复杂度O(1)

线性表的优缺点

优点

存储密度大(结点本身所占用的空间/结点结构所占存储量=1)无需为表示表中元素之间的逻辑关系,而增加额外的存储空间

可以随机存取表中任意位置的元素

缺点

插入、删除某一元素需移动大量元素

当线性表长度变化较大时,难以确定存储空间的容量,数据元素的个数不能自由扩充(存储空间不灵活)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3学习(续篇)

vue3学习(续篇) 默认有vue3基础并有一定python编程经验。 chrome浏览器安装vue.js devtools拓展。 文章目录 vue3学习(续篇)1. element-ui使用2. axios 网络请求1. 简介2. 操作 3. flask-cors解决跨域问题1. 简介2. 操作 4. 前端路由 vue-router1. 简单使用2. 配置路径别名和…

好利来做宠物蛋糕,为啥品牌争相入局宠物赛道?

2月20日,好利来宣布推出宠物烘焙品牌「Holiland Pet」,正式进军宠物烘焙市场。作为首个入局宠物烘焙领域的国内食品品牌,一经推出,就面临着各种争议,不管大众看法如何,好利来进军宠物市场,也让宠…

设计模式学习笔记 - 设计原则 - 6.KISS原则和YAGNI原则

前言 今天,将两个设计原则:KISS 原则和 YANGI 原则。其中,KISS 原则比较经典,耳熟能详,但 YANGI 你可能没怎么听过,不过它理解起来也不难。 理解这个两个原则的时候,经常会有一个共同的问题&a…

后台组件-语言包

<groupId>org.qlm</groupId><artifactId>qlm-language</artifactId><version>1.0-SNAPSHOT</version> 平台提供多语言支持&#xff0c;以上为语言包&#xff0c;提供后台多语言支持。首批实现&#xff1a; public class LanguageConstan…

Git快速上手二

对Git命令的深入理解快速上手Git&#xff08;包含提交至GitHub和Gitee&#xff09;-CSDN博客 1.5 分支操作 1.5.1 分支原理 系统上线后,又要修改bug,又要开发新的功能。 由于新功能没有开发完,所以需要建立分支,一边修改bug,一边开发新功能,最终合并. 1.5.2 分支实操 创建…

Java基于微信小程序的旅游出行必备小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

第三百八十六回

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了Snackbar Widget相关的内容,本章回中将介绍TimePickerDialog Widget.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在这里说的TimePickerDialog是一种弹出窗口&#xff0c;只不过窗口的内容固定显示…

18.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据与消息配置的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 上一个内容&#xff1a;17.数据分析工具配置功能的实现 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan…

于建筑外窗遮阳系数测试的太阳光模拟器模拟太阳光照射房屋视频

太阳光模拟器是一种用于测试建筑外窗遮阳系数的高科技设备。它能够模拟太阳光照射房屋的情景&#xff0c;帮助建筑师和设计师更好地了解建筑外窗的遮阳性能&#xff0c;从而提高建筑的能源效率和舒适度。 这种模拟器的工作原理非常简单&#xff0c;它通过使用高亮度的光源和精密…

Positional Encoding 位置编码

Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络&#xff0c;无法从序列中学习到位置信息&#xff0c;并且它是并行结构&#xff0c;不是按位置来处理序列的&#xff0c;所以为输入序列加入了位置编码&#xff0c;将每个词的位置加入到了词向量中…

Netty之WebSocket协议开发

一、WebSocket产生背景 在传统的Web通信中&#xff0c;浏览器是基于请求--响应模式。这种方式的缺点是&#xff0c;浏览器必须始终主动发起请求才能获取更新的数据&#xff0c;而且每次请求都需要经过HTTP的握手和头部信息的传输&#xff0c;造成了较大的网络开销。如果客户端…

爆肝!Claude3与ChatGPT-4到底谁厉害,看完你就知道了!

前言&#xff1a; 相信大家在pyq都被这张图片刷屏了把~ 昨天&#xff0c;为大家介绍了一下什么是Claude&#xff0c;今天咱终于弄到号了&#xff08;再被ban了3个号之后终于是成功的登上去了&#xff0c;如果各位看官觉得咱文章写的不错&#xff0c;麻烦点个小小的关注~你们的…

【详识C语言】自定义类型之三:联合

本章重点 联合 联合类型的定义 联合的特点 联合大小的计算 联合&#xff08;共用体&#xff09; 联合类型的定义 联合也是一种特殊的自定义类型 这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff08;所以联合也叫共用体&#xff09;…

mysql 数据库查询 查询字段用逗号隔开 关联另一个表并显示

文章目录 问题描述解决方案 问题描述 如下如所示&#xff1a; 表一&#xff1a;wechat_dynamically_config表&#xff0c;重点字段&#xff1a;wechat_object 表二&#xff1a;wechat_object表&#xff0c;重点字段&#xff1a;wxid 需求&#xff1a;根据wechat_dynamically_…

模仿Gitee实现站外链接跳转时进行确认

概述 如Gitee等网站&#xff0c;在有外部链接的时候如果不是同域则会出现一个确认页面。本文就带你看看这个功能应该如何实现。 效果 实现 1. 实现思路 将打开链接作为参数传递给一个中间页面&#xff0c;在页面加载的时候判断链接的域名和当前网站是否同域&#xff0c;同域…

Redis线程模型解析

引言 Redis是一个高性能的键值对&#xff08;key-value&#xff09;内存数据库&#xff0c;以其卓越的读写速度和灵活的数据类型而广受欢迎。在Redis 6.0之前的版本中&#xff0c;它采用的是一种独特的单线程模型来处理客户端的请求。尽管单线程在概念上似乎限制了其扩展性和并…

collection的遍历方式

增强for遍历 增强for的底层就是迭代器&#xff0c;为了简化迭代器的代码书写的。 他是jdk5之后出现的&#xff0c;其内部原理就是一个Iterator迭代器。 所有的单列集合和数组才能用增强for进行遍历。 package myCollection;import java.util.ArrayList; import java.util.C…

嵌入式学习day32 网络

htons()&#xff1b;//host to network short 将端口号转换为网络通信中的大端存储 eg:htons(50000); ntohs()&#xff1b;//host to network short 将大端存储转换为主机端口号 inet_addr();将IP地址转换为二进制 eg:inet_addr(192.168.1.170)&#xff1b; inet_ntoa()…

软考65-上午题-【面向对象技术】-面向对象分析、设计、测试

一、面向对象分析OOA 1-1、面向对象分析的定义 面向对象分析的目的&#xff1a;为了获得对应用问题的理解。理解的目的是确定系统的功能、性能要求。 面向对象分析包含5个活动&#xff1a;&#xff08;背&#xff01;&#xff09; 认定对象&#xff1b;&#xff08;重要一点…

QT和OPENGL安装和集成

1.QT安装 1.1官网下载&#xff1a; 网址&#xff1a;https://download.qt.io/archive/qt/ 1.2 开始安装 点击运行 首先注册sign up 然后Login in 选择安装目录 改为D盘&#xff1a; 选择安装项&#xff1a; 准备安装 开始安装&#xff1a; 安装完成&#xff1a; 1.3测试 …