数据结构_2.2、顺序表插入删除查找
1、线性表的顺序存储表示定义:
线性表:是具有相同数据类型的n (n≥0)个数据元素的有限序列
顺序表:用顺序存储的方式实现线性表
顺序存储:把逻辑上相邻的元素存储在物理 位置上也相邻的存储单元中,元素之间的关 系由存储单元的邻接关系来体现。
ElemType :就是你的顺序表中存放的数据元素类型
2、顺序表的存储结构
2.1、顺序表的实现——静态分配
给各个数据元素分配连续的存储空间,大小为 MaxSize*sizeof(ElemType)
#include <stdio.h>
#define MaxSize 10 //定义最大长度typedef struct {int data[MaxSize]; //用静态的“数组”存放数据元素int length; //顺序表的当前长度
} SqList;// 初始化顺序表
void InitList(SqList &L) {L.length = 0; // 顺序表初始化长度为0
}int main(){SqList L; //声明一个顺序表InitList(L); //初始化顺序表//尝试 “违规 ” 打印整个 data 数组
// printf("data[%d]=%d\n", L.data);for(int i=0;i<MaxSize;i++)printf("data[%d]=%d\n", i, L.data[i]);return 0;
}
2.2、顺序表的实现——动态分配

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10 //定义最大长度typedef struct {int *data; //指示动态分配数组的指针int length;//顺序表的当前长度int MaxSize; //顺序表的最大容量
} SqList;void InitList(SqList &L){
//用 malloc 函数申请一片连续的存储空间
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}//增加动态数组的长度
void IncreaseSize(SqList &L,int len){int *p=L.data;L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));for(int i=0; i<L.length; i++){L.data[i]=p[i];//顺序表最大长度增加 len,时间开销大}L.MaxSize=L.MaxSize+len;free(p);//释放原来的内存空间}int main(){SqList L; //声明一个顺序表InitList(L); //初始化顺序表IncreaseSize(L,5);free(L.data);return 0;
}


3、顺序表中基本操作的实现
3.1、初始化
- 顺序表的初始化操作就是构造一个空的顺序表。
- 为顺序表L动态分配一个预定义大小的数组空间,使 elem 指向这段空间的基地址。
- 将表的当前长度设为0。
- 动态分配线性表的存储区域可以更有效地利用系统的资源 , 当不需要该线性表时 , 可以使用 销毁操作及时释放占用的存储空间。
【算法描述】
//构造一个空的顺序表L
Status Initlist(SqList &L){L.elem=new Elemrype [MAXSIZE];//为顺序表分配一个大小为 MAXSI2E的数组空间if(!L.elem)exit(OVERFLON);//存储分配失败退出L.length=0;//空表长度为 0return OK;
}
3.2、取值
- 取值操作是根据指定的位置序号i, 获取顺序表中第i个数据元素的值。
- 由于顺序存储结构具有随机存取的特点 , 可以直接通过数组下标定位得到,elem[-1]单元存储第i个数据元素。
- 顺序表取值算法的时间复杂度为0(1)。
Status GetElem(SqList L,int i, ElemType &e)
{if {i<ll li>L.length) return ERROR; //判断i值是否合理,若不合理, 返回 ERRORe=L.elem[i-1]; //elem[i-1] 单元存储第i个数据元素return OK;
}i
3.3、查找
-
查找操作是根据指定的元素值e, 查找顺序表中第1个与e相等的元素。若查找成功,则返回该元素在表中的位置序号;若查找失败,则返回0。
-
从第一个元素起,依次和 e相比较,若找到与 e相等的元素 L.elem[i], 则查找成功,返回该元素的序号 i+1。
-
若查遍整个顺序表都没有找到,则查找失败, 返回0。
-
顺序表按值查找算法的平均时间复杂度为 O(n)。
int LocateELem(SqList L,ElemType e){//在顺序表工中查找值为e的数据元素,返回其序号for(i=0; i<L.length; i++)if(L.elem[i]==e)return i+l; //查找成功,返回序号 i+1
return 0; //查找失败,返回 0}
3.4、插入

顺序表的插入算法步骤:
顺序表插入算法的平均时间复杂度为 O(n)
Status Listinsert(SqList &L, int i, ElemType e)
{//在顺序表 L 中第 i 个位置之前插入新的元素 e, i值的合法范围是 1<=i<=L.length+lif ((i < l) || (i > L.length + l)) return ERROR; //i值不合法if (L.length == MAXSIZE) return ERROR; //当前存储空间已满for (j = L.length - 1; j >= i - 1; j--)L.elem[j + l] = L.elem[j]; //插入位置及之后的元素后移L.elem[i - l] = e; //将新元素e放入第l个位置++L.length; //表长加1return OK;}
3.5、删除
顺序表的删除算法步骤
-
判断删除位置 i 是否合法(合法值为 1 ≤ i ≤n), 若不合法则返回 ERROR。
-
将第 i个至第n个的元素依次向前移动一个位置 (i = n时无需移动)
-
表长减 1
-
顺序表删除算法的平均时间复杂度为O(n)。
Status ListDelete(SqList &l int i)
{//在顺序表工中删除第i个元素,i.值的合法范闱是1≤i≤L.length
if((i<1)|l(i>L.length)) //i值不合法return ERROR;
for(j=i;j<-L.length-l;j++)L.elem[j-1]=L.elem[j];//被删除元素之后的元素前移
--L.length;//表长减 1
return OK;
}
相关文章:
数据结构_2.2、顺序表插入删除查找
1、线性表的顺序存储表示定义: 线性表:是具有相同数据类型的n (n≥0)个数据元素的有限序列 顺序表:用顺序存储的方式实现线性表 顺序存储:把逻辑上相邻的元素存储在物理 位置上也相邻的存储单元中&#…...
嵌入式C语言自我修养:编译链接
源文件生成可执行文件的过程? 源文件经过预处理、编译、汇编、链接生成一个可执行的目标文件。 编译器驱动程序,包括预处理器、编译器、汇编器和链接器。Linux用户可以调用GCC驱动程序来完成整个编译流程。 使用GCC驱动程序将示例程序从ASCII码源文件转换…...
Mac制作Linux操作系统启动盘
前期准备 一个 Mac 电脑 一个 U 盘(8GB 以上) 下载好 Linux 系统镜像(iso 文件) 具体步骤 挂载 U 盘 解挂 U 盘 写系统镜像到 U 盘 完成 一、挂载 U 盘 首先插入 U 盘,打开终端输入下面的命令查看 U 盘是否已经 m…...
PHP语言发展历程
PHP是一种开源的服务器端脚本语言,主要用于Web开发,最初由Rasmus Lerdorf在1994年创建。PHP的发展历程如下: PHP的起源:1994年,Rasmus Lerdorf创建了PHP的第一个版本,最初是一套用于跟踪他个人简历访问的C…...
Notepad++ 之 AndroidLogger插件
背景 最近一段时间在分析Android log 定位问题,Notepad 之前用的比较少,现在看log觉得确实好用,美中不足的是 看Android log的时候不像 logcat -v color 可以区分不同等级的颜色,于是调研了一下,发现大部分都是使用An…...
开源2+1链动模式AI智能名片O2O商城小程序源码:线下店立体连接的超强助力器
摘要:本文将为您揭示线下店立体连接的重大意义,您知道吗?线上越火,线下就得越深入经营。现代门店可不再只是卖东西的地儿,还得连接KOC呢!咱们来看看门店要做的那些超重要的事儿,还有开源21链动模…...
我为什么决定关闭ChatGPT的记忆功能?
你好,我是三桥君 几个月前,ChatGPT宣布即将推出一项名为“记忆功能”的新特性,英文名叫memory。 这个功能听起来相当吸引人,宣传口号是让GPT更加了解用户,仿佛是要为我们每个人量身打造一个专属的AI助手。 在记忆功…...
如何使用ssm实现中学生课后服务的信息管理与推荐+vue
TOC ssm766中学生课后服务的信息管理与推荐vue 第一章 绪论 1.1 选题背景 目前整个社会发展的速度,严重依赖于互联网,如果没有了互联网的存在,市场可能会一蹶不振,严重影响经济的发展水平,影响人们的生活质量。计算…...
【分别为微服务云原生】9分钟ActiveMQ延时消息队列:定时任务的革命与Quartz的较量
ActiveMQ延时消息队列:定时任务的革命与Quartz的较量 摘要: 在现代的消息驱动架构中,ActiveMQ的延迟消息队列功能为定时任务提供了一种新的解决方案。本文将详细介绍ActiveMQ延迟消息队列的功能、应用场景,并与Quartz定时任务进行…...
泛型编程--模板【C++提升】(特化、类属、参数包的展开、static、模板机制、重载......你想知道的全都有)
更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: C系列语法知识_Stark、的博客-CSDN博客 其它专栏: 数据结构与算法_Stark、的博客-CSDN博客 C系列项目实战_Stark、的博客-CSDN博客 座右铭:梦…...
安卓使用memtester进行内存压力测试
memteser简介 memtester 是一个用于测试内存可靠性的工具。 它可以对计算机的内存进行压力测试,以检测内存中的错误,例如位翻转、随机存取错误等。memtester 可以在不同的操作系统上运行,并且可以针对不同大小的内存进行测试。 下载源码 m…...
Dave Cheney: Go语言之禅
本篇内容是根据2020年3月份The Zen of Go音频录制内容的整理与翻译, Dave Cheney 讲述了 Go 之禅(编写简单、可读、可维护的 Go 代码的十个工程价值)。是什么让 Go 代码变得优秀?编写 Go 代码时,我们应该牢记哪些指导原则&#x…...
SpringMVC源码-AbstractUrlHandlerMapping处理器映射器将实现Controller接口的方式定义的路径存储进去
DispatcherServlet的initStrategies方法用来初始化SpringMVC的九大内置组件 initStrategies protected void initStrategies(ApplicationContext context) {// 初始化 MultipartResolver:主要用来处理文件上传.如果定义过当前类型的bean对象,那么直接获取࿰…...
满填充透明背景二维码生成
前几天项目上线的时候发现一个问题:通过Hutool工具包生成的二维码在内容较少时无法填满(Margin 已设置为 0)给定大小的图片。因此导致前端在显示二维码时样式异常。 从图片中我们可以看到,相同大小的图片,留白内容是不一样的。其中上半部分…...
Python | Leetcode Python题解之第452题用最少数量的箭引爆气球
题目: 题解: class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:if not points:return 0points.sort(keylambda balloon: balloon[1])pos points[0][1]ans 1for balloon in points:if balloon[0] > pos:pos balloo…...
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作删除二叉搜索树中的节点修剪二叉搜索树
代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树 主要学习内容: 二叉搜索树的插入删除操作 701.二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作 - 力扣(LeetCode&…...
使用Apifox创建接口文档,部署第一个简单的基于Vue+Axios的前端项目
前言 在当今软件开发的过程中,接口文档的创建至关重要,它不仅能够帮助开发人员更好地理解系统架构,还能确保前后端开发的有效协同。Apifox作为一款集API文档管理、接口调试、Mock数据模拟为一体的工具,能够大幅度提高开发效率。在…...
TCP的第三次握手没有回复,会出现哪些问题现象
从三次握手的一开始来讲,刚开始客户端和服务器都处于close状态 这里不能是2次握手的原因就在于,服务器端即女孩子,无法确认客户端即男孩子,是否已经收到了,我也愿意建立连接即我也爱你,这一条最终确认的信息…...
【工具】arxiv_latex_cleaner 去除latex注释
https://github.com/google-research/arxiv-latex-cleaner/issues/24 文章目录 1.修改编码2.如何安装2.1.打包2.2.安装 3.测试功能 注意:需要创建python3.9的环境 1.修改编码 官方提供的arxiv_latex_cleaner的编码格式是有问题的,见这里。这个有位朋友说…...
macOS开发环境配置与应用开发
一、macOS开发环境配置 1. 安装Xcode Xcode 是Apple官方开发环境工具,用于macOS、iOS、watchOS和tvOS应用开发。它集成了代码编辑、编译、调试、性能分析、界面设计等功能。 下载与安装: 打开 App Store,搜索“Xcode”。 点击安装ÿ…...
告别教材下载烦恼:国家中小学智慧教育平台电子课本解析工具如何实现3分钟高效获取
告别教材下载烦恼:国家中小学智慧教育平台电子课本解析工具如何实现3分钟高效获取 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地…...
前端开发者的福音:5分钟用Mergely.js给你的网页加个在线文本对比器
零成本打造专业级文本对比工具:Mergely.js全攻略 在代码审查、合同修订或是配置管理场景中,文本差异对比是个高频刚需。传统方案要么需要后端支持,要么功能简陋。现在,只需5分钟和几行JavaScript代码,你就能为Web项目嵌…...
**雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现**在物联网(IoT)飞速发展的今天,传统云
雾计算中的边缘智能:基于Python的轻量级任务调度系统设计与实现 在物联网(IoT)飞速发展的今天,传统云计算模式已难以满足低延迟、高带宽和实时响应的需求。**雾计算(Fog Computing)**作为云与终端设备之间的…...
实战指南:基于快马AI生成可部署的、支持多游戏与数据库的账号管理应用
今天想和大家分享一个实战项目:用Python开发一个支持多游戏的账号管理器(俗称"lv上号器")。这个工具特别适合游戏多开玩家,能安全存储不同游戏的账号信息,还能一键登录不同游戏客户端。 项目需求分析 首先明…...
在线PPT工具哪个最方便快捷?6款主流工具实测,新手也能快速出片
作为AI博主,日常要产出AI工具实测、智能创作干货、高效办公教程,对在线PPT工具的核心需求远超基础编辑——全端适配、AI生成专业、安全合规、资源充足,无需复杂操作,既能依托AI快速生成高质量内容,又能兼顾多场景使用与…...
从零构建32位MIPS单周期处理器:Logisim实战与24条核心指令实现详解
1. 从零理解MIPS单周期处理器 第一次接触CPU设计时,我盯着教科书上的数据通路图看了整整三天——那些密密麻麻的连线和缩写让我头晕目眩。直到用Logisim动手搭建了一个最简单的加法器,才突然明白处理器不过是精心设计的电子积木。单周期MIPS处理器就像乐…...
OpenJSCAD.org与3D打印完美结合:从代码到实物的完整工作流程
OpenJSCAD.org与3D打印完美结合:从代码到实物的完整工作流程 【免费下载链接】OpenJSCAD.org JSCAD is an open source set of modular, browser and command line tools for creating parametric 2D and 3D designs with JavaScript code. It provides a quick, pr…...
高效双电源自动切换电路的设计与实现
1. 双电源自动切换电路的应用场景 双电源自动切换电路在现代电子设备中扮演着关键角色,它能确保设备在不同供电来源之间无缝切换,避免断电导致的系统崩溃。这种电路设计特别适合以下场景: 便携式设备:比如蓝牙音箱、移动电源等&am…...
intv_ai_mk11实测效果:在24GB显存限制下保持128~512 token长文本生成质量
intv_ai_mk11实测效果:在24GB显存限制下保持128~512 token长文本生成质量 1. 模型效果惊艳展示 intv_ai_mk11作为一款基于Llama架构的中等规模文本生成模型,在24GB显存环境下展现出了令人印象深刻的长文本生成能力。不同于常规模型在显存限制下容易出现…...
深圳嵌入式技术产业创新与应用全景
1. 深圳嵌入式科技产业全景扫描 深圳作为中国科技创新高地,已形成全球最完整的嵌入式技术产业链。从消费电子到工业控制,从汽车电子到医疗设备,嵌入式系统正以"润物细无声"的方式重塑各个行业。这座城市聚集了超过2000家嵌入式相关…...
