数据结构之线性表插入与删除运算

news2024/10/4 20:28:40

线性表

线性表的定义

线性表,或称表,是一种非常灵便的结构,可以根据需要改变表的长度,也可以在表中任何位置对元素进行访问、插入或删除等操作。另外,还可以将多个表连接成一个表,或把一个表拆分成多个表。例如,26个英文字母的字母表:(A,B,C,…,Z)就是一个线性表,表中的数据元素是单个字母。在稍复杂的线性表中,一个数据元素可以包含若干个数据项。例如在学生基本信息表中,每个学生为一个数据元素,包括学号、姓名、性别、籍贯、专业等数据项。

由以上示例可以看出,它们的数据元素虽然不同,但同一线性表中的元素必定具有相同的特性,即属于同一数据对象,相邻数据元素之间存在着序偶关系

诸如此类由n(n≥0)个数据特性相同的元素构成的有限序列称为线性表。线性表中元素的个数 n(n≥0)定义为线性表的长度,n=0时称为空表

对于非空的线性表或线性结构,其特点是:

  • 存在唯一的一个被称作第一个的数据元素
  • 存在唯一的一个被称作最后一个的数据元素
  • 除第一个数据元素之外,结构中的每个数据元素均只有一个前驱
  • 除最后一个数据元素之外,结构中的每个数据元素均只有一个后继

线性表的顺序存储结构

线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种表示也称作线性表的顺序存储结构或顺序映像。通常,用顺序存储结构的线性表称为顺序表。其特点是,逻辑上相邻的数据元素,其物理次序也是相邻的

假设线性表的每个元素需占用x个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储起始位置。则线性表中第 i+1 个数据元素的存储位置LOC(ai+1)和第 i 个数据元素的存储位置LOC(ai)之间满足下列关系:

LoC(ai+1)=LOC(ai)+x

一般来说,线性表的第i个数据元素 ai的存储位置为:

LoC(ai)=LOC(ai)+(i-1)x

式中,LOC(a1)是线性表的第一个数据元素a1的存储地址位置,通常称作线性表的起始位置或基地址,表中相邻的元素aiai+1的存储位置是相邻的,每一个数据元素的存储位置都和线性表的起始位置相差一个常数,如图所示。

在这里插入图片描述

只要确定了存储线性表的起始位置,线性表中任一数据元素都可随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构

线性表的插入与删除运算

插入

线性表的插入操作是指在表的第 i(1 ≤ i ≤ n十1)个位置插人一个新的数据元素e,使长度为n的线性表变成长度为n+1的线性表

数据元素之间的逻辑关系发生了变化。在线性表的顺序存储结构中,由于逻辑上相邻的数据元素在物理位置上也是相邻的,因此,除非i=n+1,否则必须移动元素才能反映这个逻辑关系的变化。

在这里插入图片描述

如上图所示为一个线性表在插人新的数据元素前后数据元素在存储空间中的位置变化。为了在线性表的第5个位置上插人一个值为25的数据元素,则需将第5个至第8个数据元素依次向后移动一个位置。长度也发生变化,从原本n=8变成n=9

一般情况下,在第i(1 ≤ i ≤ n)个位置插入一个元素时,需从最后一个元素即第n个元素开始,依次向后移动一个位置,直至第i个元素(共n-i+1个元素)。仅当插入位置i=n+1时,才无须移动数据元素

算法步骤:

  • 判断插人位置i是否合法,若不合法则返回ERROR
  • 判断顺序表的存储空间是否已满,若满则返回 ERROR
  • 将第n个至第i个位置的元素依次向后移动一个位置,空出第i个位置(i=n十1时无须移动)
  • 将要插入的新元素e放入第i个位置。
  • 表长加 1。

顺序表插入算法的平均时间复杂度为O(n)。

删除

线性表的删除操作是指将表的第i ( 1 ≤ i ≤ n)个元素删去,将长度为n的线性表变成长度为n-1的线性表。数据元素之间的逻辑关系发生了变化,为了在存储结构上反映这个变化,同样需要移动元素。

在这里插入图片描述

如上图所示,为了删除第4个数据元素,必须将第5个至第8个元素都依次向前移动一个位置

算法步骤:

  • 判断删除位置i是否合法,若不合法则返回ERROR。
  • 将第i+1个至第n个的元素依次向前移动一个位置(i=n时无须移动)。
  • 表长减 1。
    由此可见,顺序表删除算法的平均时间复杂度为O(n)

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

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

相关文章

网站常见的攻击类型有什么,如何针对性防护

在互联网时代,几乎每个网站都存在着潜在的安全威胁。这些威胁可能来自人为失误,也可能源自网络犯罪团伙所发起的复杂攻击。无论攻击的本质如何,网络攻击者的主要动机通常是谋求经济利益。这意味着不管是什么网站类型潜在的威胁一直都存在。 在…

使用傅里叶实现100倍的压缩效果(附Python源码)

傅里叶变换(Fourier Transform)是一种将一个函数(在时间或空间域)转换为另一个函数(在频率域)的数学变换方法。它在信号处理、图像处理、通信等领域有广泛应用。 实现过程 将傅里叶系数核心的1%保留&…

挑战杯 地铁大数据客流分析系统 设计与实现

文章目录 1 前言1.1 实现目的 2 数据集2.2 数据集概况2.3 数据字段 3 实现效果3.1 地铁数据整体概况3.2 平均指标3.3 地铁2018年9月开通运营的线路3.4 客流量相关统计3.4.1 线路客流量排行3.4.2 站点客流量排行3.4.3 入站客流排行3.4.4 整体客流随时间变化趋势3.4.5 不同线路客…

【Redis】理论进阶篇------Redis的持久化

一、前言 前面学习了Redis的相关的十大数据类型以及用SpringBoot集成我们的Redis的工具代码的书写。从这篇文章开始,就会从Redis相关的一些理论(也是面试和工作的热点知识)如:Redis的持久化、Redis的订阅发布模型、Redis集群环境搭…

RF框架自定义测试库开发

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

Audition 2023(Au)下载安装及详细安装教程

Audition(Au)的介绍 Adobe Audition(简称Au,原名Cool Edit Pro)是由Adobe公司开发的一个专业音频编辑和混合环境。Audition专为在照相室、广播设备和后期制作设备方面工作的音频和视频专业人员设计,可提供先进的音频混合、编辑、控…

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令

《汇编语言》- 读书笔记 - 第10章-CALL 和 RET 指令 10.1 ret 和 retf检测点 10.1 10.2 call 指令10.3 依据位移进行转移的 call 指令检测点 10.2 10.4 转移的目的地址在指令中的 call 指令检测点 10.3 10.5 转移地址在寄存器中的 call 指令10.6 转移地址在内存中的 call 指令检…

LabVIEW高速信号测量与存储

LabVIEW高速信号测量与存储 介绍了LabVIEW开发的高速信号测量与存储系统,解决实验研究中信号捕获的速度和准确性问题。通过高效的数据处理和存储解决方案,本系统为用户提供了一种快速、可靠的信号测量方法。 项目背景 在科学研究和工业应用中&#xf…

session和cookie理解

目录 1、理解无状态 2、Session和Cookie理论 3、使用session存储数据 前言,理解session与cookie对于我们做web测试、接口测试、性能测试都是非常有帮助的。 cookie是一些数据信息,存储在浏览器端。 session是存储于服务器端的特殊对象,服务器…

Java并发基础:CompletableFuture全面解析

内容概要 CompletableFuture类使得并发任务的处理变得简单而高效,通过简洁的API,开发者能轻松创建、组合和链式调用异步操作,无需关心底层线程管理,这不仅提升了程序的响应速度,还优化了资源利用率,让复杂…

【Redis】 如何保证数据不丢失?

目录 1.Redis 持久化 1.1 RDB 持久化 1.2 AOF 持久化 1.3 混合持久化 2.Redis 集群 2.1 主从同步 2.2 哨兵模式 2.3 Redis Cluster 小结 1.Redis 持久化 持久化是指将数据从内存中存储到持久化存储介质中(如硬盘)的过程,以便在程序重…

C++之Easyx——图形库的基本准备工作

什么是Easyx? EasyX Graphics Library 是针对 Visual C 的免费绘图库,支持 VC6.0 ~ VC2022,简单易用,学习成本极低,应用领域广泛。目前已有许多大学将 EasyX 应用在教学当中。 它比Red PandaDev C上的图形库功能要强…

好用的UI自动化测试平台推荐

随着软件行业的不断发展,建立一个完善的自动化测试体系变得至关重要。目前,自动化测试主要涵盖接口自动化测试和UI自动化测试两个主要领域。就目前而言,企业在UI自动化测试方面的覆盖率仍然相对较低。 接口自动化测试可以模拟和执行应用程序…

怎么清理mac系统缓存系统垃圾文件 ?怎么清理mac系统DNS缓存

很多使用苹果电脑的用户都喜欢在同时运行多个软件,不过这样会导致在运行一些大型软件的时候出现不必要的卡顿现象,这时候我们就可以去清理下内存,不过很多人可能并不知道正确的清内存方式,下面就和小编一起来看看吧。 mac系统是一…

虚拟机--pc端和macOS端互通

windows开启虚拟化 要在Windows系统中开启虚拟化,您可以按照以下步骤操作: 准备工作: 确保您的计算机CPU支持虚拟化技术。在BIOS中开启相应的虚拟化支持。 开启虚拟化: 打开控制面板,点击程序或功能项&am…

初识KMP算法

目录 1.KMP算法的介绍 2.next数组 3.总结 1.KMP算法的介绍 首先我们会疑惑,什么是KMP算法?这个算法是用来干什么的? KMP(Knuth-Morris-Pratt)算法是一种用于字符串匹配的经典算法,它的目标是在一个主文本…

Allegro172版本如何用自带功能改变过孔网络属性操作指导

Allegro172版本如何用自带功能改变过孔网络属性操作指导 在用Allegro做PCB设计的时候,时常会需要将过孔的网络进行变更,可以将原来的过孔删除,再重新打一个,这种方法难免会繁琐一些。 当然我们可以借助skill工具来完成更换过孔网络的更改,除此之外,Allegro自带的功能完成…

Excel常用快捷键(持续更新)

引言 excel是我们办公中经常使用的工具,古语言“工欲善其事必先利其器”。excel是一个好的工具,但是工具里面有很多常用的快捷键,若我们熟记这些快捷键,便可以提高我们的工作效率。本文为持续更新,望有助于搬砖。 1、C…

简单的线程池——从单线程到多线程——从零基础到零基础(站长素材)

多进程(Process)-读取到数据,要用cpu来运行大量的次数和时间(多线程)(cpu密集型)——multiprocessing 多线程(Thread)-IO多的,同时运行任务数目不多&#xf…

stm32学习笔记-STLINK使用

stm32学习笔记-STLINK使用 使用ST-LINK调试程序进度表格 使用ST-LINK调试程序 说明 组成 总结 记录使用STLINK进行项目的烧写和调试,旨在高效的进行代码调试学习工具包括笔记本、keil5MDK、stm32f030c8t6电表主机、STLINK V2、导线、电表代码总的来说&#xff0…