顺序表--续(C语言详细版)

2.9 在指定位置之前插入数据

// 在指定位置之前插入数据
void SLInsert(SL* ps, int pos, SLDataType x);

步骤:

① 程序开始前,我们要断言一下,确保指针是有效的,不是NULL;

② 我们还要断言一下,指定的位置下标 pos 得有效;

③ 下标 0~ps->size 都是有效的;

④ 检查内存是否足够;

⑤ 插入数据之前,得把pos位置及之后的位置的数据往后挪动一位;

⑥ 最后把数据 x 插入到 pos 下标,插完之后,数组元素总个数 ps->size 得加1。

// 在指定位置之前插入数据
void SLInsert(SL* ps, int pos, SLDataType x)
{assert(ps);assert(pos >= 0 && pos <= ps->size);// 检查内存SLCheckCapacity(ps);// 让pos位置及之后的位置的数据往后挪动一位for(int i = ps->size; i > pos; i--){ps->arr[i] = ps->arr[i - 1]; // 最后一次:arr[pos + 1] = arr[pos]}ps->arr[pos] = x;	// 插入数据ps->size++;
}

测试程序:第一步测试头插

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 测试指定位置之前插入数据// 头插SLInsert(&sl, 0, 66);SLPrint(sl);// 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行结果:

测试程序:第二步测试尾插

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 测试指定位置之前插入数据// 尾插SLInsert(&sl, sl.size, 1000);SLPrint(sl);// 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行结果:

测试程序:第三步测试指定位置插入

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 测试指定位置之前插入数据SLInsert(&sl, 2, 6);SLPrint(sl);	// 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行结果:

2.10 删除指定位置的数据

// 删除指定位置的数据
void SLErase(SL* ps, int pos);

步骤:

① 程序开始前,我们要断言一下,确保指针是有效的,不是NULL;

② 我们还要断言一下,指定的位置下标 pos 得有效;

③ 下标 0~ps->size - 1 都是有效的;

④ 检查内存是否足够;

⑤ 插入数据之前,得把pos位置之后的数据往前挪动一位

⑥ 数组元素总个数 ps->size 得减1。

// 删除指定位置的数据
void SLErase(SL* ps, int pos)
{assert(ps);assert(pos >= 0 && pos < ps->size);// 让pos位置之后的数据往前挪动一位for (int i = pos; i < ps->size - 1; i++){ps->arr[i] = ps->arr[i + 1];	// 最后一次:arr[size - 2] = arr[size - 1]}ps->size--;
}

测试程序:第一步测试头删

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 删除指定位置的数据// 测试头删SLErase(&sl, 0);SLPrint(sl);	// 2 3 4// 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行结果:

测试程序:第二步测试尾删

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 测试尾删SLErase(&sl, sl.size - 1);SLPrint(sl);	// 1 2 3 // 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行结果:

测试程序:第三步测试指定位置删除

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 删除指定位置的数据// 测试删除指定位置的数据SLErase(&sl, 2);SLPrint(sl);	// 1 2 4// 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行结果:

2.11 顺序表查找数据

// 顺序表的查找
int SLFind(SL* ps, SLDataType x);

步骤:

① 程序开始前,我们要断言一下,确保指针是有效的,不是NULL;

② 遍历数组,找到了 x,就返回对应的下标;没有找到就返回 -1。

// 顺序表的查找
int SLFind(SL* ps, SLDataType x)
{assert(ps);for (int i = 0; i < ps->size; i++){if (ps->arr[i] == x){// 找到了return i;}}// 没有找到return -1;
}

测试程序:能找到数据

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 测试顺序表的查找int find = SLFind(&sl, 4);if (find >= 0)printf("找到了,下标为:%d", find);elseprintf("没有找到!\n");// 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行结果:

测试程序:找不到数据

void SLTest02()
{SL sl;SLInit(&sl);// 尾插4个数据SLPushBack(&sl, 1);SLPushBack(&sl, 2);SLPushBack(&sl, 3);SLPushBack(&sl, 4);SLPrint(sl);// 测试顺序表的查找int find = SLFind(&sl, 5);if (find >= 0)printf("找到了,下标为:%d", find);elseprintf("没有找到!\n");// 顺序表销毁SLDestroy(&sl);
}int main()
{SLTest02();return 0;
}

运行数据:

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

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

相关文章

ctfshow sql注入 web234--web241

web234 $sql "update ctfshow_user set pass {$password} where username {$username};";这里被过滤了&#xff0c;所以我们用\转义使得变为普通字符 $sql "update ctfshow_user set pass \ where username {$username};";那么这里的话 pass\ where…

Hadoop和Flink漏洞修复

Hadoop漏洞修复 CVE-2021-33036: Hadoop YARN REST API 未授权访问导致远程代码执行漏洞Cluster Overview 未授权访问漏洞Hadoop 未授权访问漏洞 修复方法1 修复方法1 1、进入hadoop配置文件目录&#xff0c;创建密钥文件 cd /home/flink/hadoop-3.3.2/etc/hadoop echo &qu…

libtorch+torchvision windows编译

libtorch建议直接采用官方的预编译版本,对应好torchvision版本做编译。 1. libtorch预编译版本下载 libtorch官方下载地址 Pybind11编译 git clone https://github.com/pybind/pybind11.git cd pybind11 mkdir build (base) PS E:\project\pybind11-2.13.1> cd .\build…

API类别 - UI核心

API类别 - UI核心 引言 在当今的数字时代&#xff0c;用户界面&#xff08;UI&#xff09;是任何软件或应用成功的关键因素之一。UI核心API作为构建用户界面的基础&#xff0c;提供了丰富的功能和工具&#xff0c;使得开发者能够创建出既美观又实用的用户界面。本文将深入探讨…

小程序-<web-view>嵌套H5页面支付功能

背景&#xff1a;小程序未发布前&#xff0c;公司使用vue框架搭建了管理系统&#xff0c;为了减少开发成本&#xff0c;微信提供了web-view来帮助已有系统能在小程序上发布&#xff0c;详见web-view | 微信开放文档。因公司一直未打通嵌套H5小程序的支付功能&#xff0c;导致用…

AIGC对设计行业的影响与启发:AIGC设计能替代真正的设计师吗?

随着科技的飞速发展&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术在设计行业的应用日益广泛&#xff0c;引发了广泛的讨论和关注。AIGC以其高效、多样化的生成能力&#xff0c;为设计行业带来了前所未有的变革。然而&#xff0c;关于AIGC是否能替代真正的设计…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(一)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

Python 生成Md文件带超链 和 PDF文件 带分页显示内容

software.md # -*- coding: utf-8 -*- import os f open("software.md", "w", encoding"utf-8") f.write(内部测试版2024 MD版\n) for root, dirs, files in os.walk(path): dax os.path.basename(root)if dax "":print("空白…

雅思词汇及发音积累 2024.7.3

银行 check &#xff08;美&#xff09;支票 cheque /tʃek/ &#xff08;英&#xff09;支票 ATM 自动取款机 cashier 收银员 teller /ˈtelə(r)/ &#xff08;银行&#xff09;出纳员 loan 贷款 draw/withdraw money 提款 pin number/passsword/code …

从 ClickHouse 到 Apache Doris:快成物流的数智化货运应用实践

导读&#xff1a;随着快成物流的大宗商品产业链的不断发展&#xff0c;货运轨迹规划和实时数据分析的需求日益迫切&#xff0c;为了保障数据报表更新、用户画像圈选与物流轨迹实时更新等大数据核心系统性能&#xff0c;快成物流引入 Apache Doris 实时数仓升级了大数据算法平台…

数据决策系统详解

文章目录 数据决策系统的核心组成部分&#xff1a;1. **数据收集与整合**&#xff1a;2. **数据处理与分析**&#xff1a;3. **数据可视化**&#xff1a;4. **决策支持**&#xff1a; 数据决策系统的功能&#xff1a;决策类型&#xff1a;数据决策系统对企业的重要性&#xff1…

这才叫必备软件推荐 你不能不知道的mac软件 Mac上有什么实用的必备软件 Mac常用必备软件推荐 一些好用的Mac软件

Mac OS是一个类Unix系统&#xff0c;内置终端Shell&#xff0c;这使得它天生就适合为程序员、开发者、设计者所用。不得不说苹果对用户体验的追求已经到了极致。遂开本篇&#xff0c;由于应用众多&#xff0c;一锅炖不下&#xff0c;故打算做一个系列。 下面为大家一一介绍一些…

基于物品的协同过滤算法

预估用过户对候选物品的兴趣 计算物品相似度 召回通道 快速做召回条件

Unity2D - 状态机(State Machine)详解

1. 状态机概述 在角色的生成中&#xff0c;由于事件的不同&#xff0c;动作的不同&#xff0c;角色会处于不同的状态中。例如对战冒险游戏&#xff0c;面临Boss的攻击&#xff0c;角色会受到例如中毒&#xff0c;恐惧等Debuff效果&#xff0c;若单纯的在一个脚本中使用if等语句…

绝地求生PUBG怎么领取补偿G币 补偿G币什么时候到账

绝地求生这款大逃杀射击游戏相信大家都不陌生&#xff0c;在之前的新版本NewJeans联动中&#xff0c;由于一些官方设定的错误&#xff0c;导致在开典藏箱的时候出现了一些问题&#xff0c;官方也推出了相应的补偿措施&#xff0c;比如退还G币&#xff0c;回收典藏箱子开出来的东…

Linux之Uboot简介和移植

uboot简介 uboot 的全称是 Universal Boot Loader&#xff0c;uboot 是一个遵循 GPL 协议的开源软件&#xff0c;uboot是一个裸机代码&#xff0c;可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高级功能。 也就是说&#xff0c;可以在没有系统的情况…

绝区零国际服怎么下载 绝区零国际服下载教程

绝区零即将上线&#xff0c;每位玩家都能在这里开启全新的时空冒险之旅&#xff0c;主要玩法分为以剧情和副本为主的核心玩法、以刷材料为主的养成副本&#xff0c;以及日常任务为主&#xff0c;在以往的手游中&#xff0c;玩家进入某项玩法只需要从游戏界面调取菜单即可&#…

如何用简单的html,css,js写出一个带有背景层的删除弹出框

虽然每次项目都是主要写后端&#xff0c;但是有时候前端的样式太丑了&#xff0c;也有点看不下去。弹出框是项目中用的比较多的&#xff0c;比如删除&#xff0c;修改或者添加什么的&#xff0c;都需要一个弹出框。 所以这里简单记录一下&#xff0c;应该如何实现。实现效果如…

SpringBoot自动配置

项目内部配置第三方bean 第三方的bean通过配置类的bean注入&#xff0c;项目内部引用使用Import配置类的class 解耦引入的第三方配置类&#xff0c; 新建一个缓冲类加载需要引入的配置类 将需要引入第三方配置类加入Mate-inf中的factories中 加载返回可以引入第三方的bean …

软考《信息系统运行管理员》-2.3信息系统运维的外包

2.3信息系统运维的外包 信息系统运维外包的概念/模式 也称为信息系统代维。是指信息系统使用单位将全部或一部分的信息系统维护服务工作&#xff0c;按照规定的维护服务要求&#xff0c;外包委托给专业公司管理。 完全外包运维模式部分外包模式 信息系统运维外包的好处 有利…