顺序表--续(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);
	else
		printf("没有找到!\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);
	else
		printf("没有找到!\n");

	// 顺序表销毁
	SLDestroy(&sl);
}

int main()
{
	SLTest02();

	return 0;
}

运行数据:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智慧灌区信息化系统完整解决方案

一、背景 随着科技的快速发展&#xff0c;智慧灌区信息化系统正逐渐成为提高农业灌溉效率、优化水资源配置的重要手段。本文将详细介绍智慧灌区信息化系统的完整解决方案&#xff0c;包括系统、功能、应用以及优势分析等方面&#xff0c;旨在为灌区的现代化和高效管理提供有力…

靶场练习 手把手教你通关DC系列 DC1

DC1靶场通关教程 文章目录 DC1靶场通关教程前言一、信息收集1.主机存活2.端口收集3.网页信息收集4.目录收集4.1 Nikto4.2 Dirb 信息收集总结 二、漏洞发现与利用1. 发现2. 利用 三、FlagFlag1Flag2Flag3Flag4Flag5(提权) 前言 本次使用的kali机的IP地址为192.168.243.131 DC1的…

倒计时 2 周!CommunityOverCode Asia 2024 IoT Community 专题部分

CommunityOverCode 是 Apache 软件基金会&#xff08;ASF&#xff09;的官方全球系列大会&#xff0c;其前身为 ApacheCon。自 1998 年以来&#xff0c;在 ASF 成立之前&#xff0c;ApacheCon 已经吸引了各个层次的参与者&#xff0c;在 300 多个 Apache 项目及其不同的社区中探…

给数组/对象添加一个(key-value)对象

需要将一个value值前面加上key值&#xff0c;放进数组/对象中 this.$set(res.data[0],type,1) this.$set( target, key, value ) target&#xff1a;要更改的数据源(可以是对象或者数组) key&#xff1a;要更改的具体数据 value &#xff1a;重新赋的值。 结果&#xff1a;…

05.C1W4.Machine Translation and Document Search

往期文章请点这里 目录 OverviewWhat you’ll be able to do!Learning Objectives Transforming word vectorsOverview of TranslationTransforming vectors Align word vectorsSolving for RFrobenius normFrobenius norm squaredGradient K nearest neighborsFinding the tr…

Open3D 点对面的ICP算法配准(精配准)

目录 一、概述 1.1核心思想 1.2实现步骤 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 3.3计算数据 一、概述 基于点对面的ICP&#xff08;Iterative Closest Point&#xff09;配准算法是ICP的一种变体&#xff0c;它通过最小化源…

骏网一卡通之类的游戏卡有什么用?

感觉现在打端游的人越来越少了 而且游戏充值卡显得就很鸡肋&#xff0c;在家里整理东西&#xff0c;翻出来好多骏网一卡通&#xff0c;但是我又不打游戏 想着把这卡送给有需要的朋友&#xff0c;不然也是浪费&#xff0c;问了一圈送不出去 还好最后在收卡云上卖掉了&#xf…

H桥驱动器芯片详解

H桥驱动器芯片详解 上一篇文章讲解了H桥驱动器的控制原理&#xff0c;本文以汽车行业广泛应用的DRV8245芯片为例&#xff0c;详细讲解基于集成电路的H桥驱动器芯片。 1.概述 DRV824x-Q1系列器件是德州仪器&#xff08;TI&#xff09;的一款专为汽车应用设计的全集成H桥驱动器…

【本地docker启动私有大模型】

一、最终效果 中英文对话 生成代码 二、资源配置 本文选择的模型运行内存需要 4G&#xff0c;因此宿主机建议内存大于8G&#xff0c;CPU建议 6 核以上&#xff1b; 参考博主该mac配置可以相对流畅运行。只需要 CPU资源&#xff0c;不需要 GPU。 三、搭建步骤 启动docker容…

羊大师:探索羊奶奥秘,解锁免疫力提升新篇章

在浩瀚的自然界中&#xff0c;羊奶以其独特的营养价值和健康益处&#xff0c;悄然成为提升免疫力的新宠。自古以来&#xff0c;羊奶就被视为珍贵的滋补佳品&#xff0c;而今&#xff0c;随着科学的深入探索&#xff0c;其提升免疫力的奥秘正逐渐揭开面纱。 羊奶中富含的免疫球蛋…

MQTT教程--服务器使用EMQX和客户端使用MQTTX

什么是MQTT MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级、基于发布-订阅模式的消息传输协议&#xff0c;适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎&#xff0c;能够实现传感器、执行器和其它设备…

字典树(Tire树)

字典树(Tire树) 字典树是一种多叉树&#xff0c;又称为前缀树。核心思想是利用字符串的公共前缀。 字典树的根节点为空&#xff0c;从根节点到某一节点路径上的字符连接起来构成字符串&#xff0c;完整的字符串在链上而非结点上&#xff0c;一个节点的所有子节点都具有相同公…

用Vue3和Plotly.js绘制交互式3D散点图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 Plotly.js 创建 2D 密度图 应用场景介绍 密度图是一种可视化数据分布的图表&#xff0c;它显示了数据点的密度在不同区域的变化情况。在许多科学和工程领域中&#xff0c;密度图被广泛用于探索和分析数据…

产品经理/项目经理管理项目使用最多的12款项目软件对比

盘点不同行业、项目类型的下的12款主流的项目管理软件&#xff1a;PingCode、Worktile、Teambition、TAPD、广联达、Asana、Basecamp、Jira、Microsoft Project、ClickUp、Redmine、Trello。 在这个项目管理工具层出不穷的时代&#xff0c;选择一个合适的软件似乎成了一个令许多…

当CNN遇上Mamba,高性能与高效率通通拿下!

传统视觉模型在处理大规模或高分辨率图像时存在一定限制&#xff0c;为解决这个问题&#xff0c;研究者们就最近依旧火热的Mamba&#xff0c;提出了Mamba结合CNN的策略。 这种结合可以让Mamba在处理长序列数据时既能够捕捉到序列中的时间依赖关系&#xff0c;又能够利用CNN的局…

工业一体机为数字化工厂带来高效作业指导

随着工业4.0的浪潮席卷全球&#xff0c;数字化工厂的概念深入人心。在这一背景下&#xff0c;工业一体机作为数字化转型的重要一环&#xff0c;凭借其强大的功能和灵活的应用&#xff0c;为工厂实现高效作业指导提供了强大的助力。 一、工业一体机的优势&#xff1a;赋能数字化…

3102. 最小化曼哈顿距离——leetcode

给你一个下标从 0 开始的数组 points &#xff0c;它表示二维平面上一些点的整数坐标&#xff0c;其中 points[i] [xi, yi] 。 两点之间的距离定义为它们的曼哈顿距离。 请你恰好移除一个点&#xff0c;返回移除后任意两点之间的 最大 距离可能的 最小 值。 示例&#xff1…

计算机的核心工作机制

前言 本篇不介绍代码&#xff0c;主要是理解计算机的一些核心工作机制。想了解更多请跳转-->【【计算机科学速成课】[40集全/精校] - Crash Course Computer Science】 冯诺依曼体系结构 由计算机之父之一冯诺依曼提出的计算机内部构造的基本组成&#xff0c;而现在大多数…

向github远程仓库中push,要求使用token登录

Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. 如上&#xff0c;当向github远程仓库push时&#xff0c;输入github的用户名和密码出现如上错误&#xff0c;要求使用token登录&#xff0c;此时只需要用户…

智慧光伏一站式解决方案

光伏电站智慧化管理平台&#xff0c;将现代先进的数字信息技术、通信技术、互联网技术、云计算技术、大数据挖掘技术与光伏技术高度融合而形成。可以满足光伏企业对电站的高发电量、低初始投资、低运维成本等需求&#xff0c;从开发到运维的25年生命周期内&#xff0c;实现高收…