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

news2024/10/6 10:25:47

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;
}

运行数据:

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

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

相关文章

【大模型LLM面试合集】大语言模型基础_llm概念

1.llm概念 1.目前 主流的开源模型体系 有哪些&#xff1f; 目前主流的开源LLM&#xff08;语言模型&#xff09;模型体系包括以下几个&#xff1a; GPT&#xff08;Generative Pre-trained Transformer&#xff09;系列&#xff1a;由OpenAI发布的一系列基于Transformer架构…

64位Office API声明语句第120讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…

JVM原理(十二):JVM虚拟机类加载过程

一个类型从被加载到虚拟机内存中开始&#xff0c;到卸载为止&#xff0c;它的整个生命周期将会经过 加载、验证、准备、解析、初始化、使用、卸载七个阶段。其中 验证、准备、解析三个部分统称为 连接 1. 加载 加载是整个类加载的一个过程。在加载阶段&#xff0c;Java虚拟机…

第25篇 滑动开关控制LED<三>

Q&#xff1a;如何创建流水灯汇编语言程序工程并运行呢&#xff1f; A&#xff1a;基本原理&#xff1a;与用单个SW控制单个对应LED点亮与熄灭一样&#xff0c;我们创建用SW控制流水灯状态。默认初始状态为4个连续的红色LED为一组&#xff08;每组之间隔4个熄灭的LED&#xff…

如何在网络抓取过程中绕过 CAPTCHA 和 reCAPTCHA?

什么是 CAPTCHA&#xff1f; CAPTCHA&#xff0c;全称为 “Completely Automated Public Turing test to tell Computers and Humans Apart”&#xff08;完全自动化的公共图灵测试以区分计算机和人类&#xff09;&#xff0c;是一种用于识别网站访问者是否为真实人的测试。 这…

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

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

Django 一对一关系

作用&#xff1a; 两个数据库表建立外键关系当外键表的数据被删除时&#xff0c;主表的数据也会一并删除。 1&#xff0c;添加表模型 Test/app8/views.pyfrom django.db import modelsclass User(models.Model):username models.CharField(max_length50, uniqueTrue)email …

程序员AI提效案例:统计B站课程耗时情况

文章目录 一&#xff0c;时长统计需求二&#xff0c;一波三折三&#xff0c;终极方案 AIJava总结 今天为了写一篇博客&#xff0c;这篇博客介绍了B站的一个Java项目&#xff0c;这个项目分为三个阶段&#xff1a; 初级篇高级篇运维篇 一&#xff0c;时长统计需求 我想根据每个…

软件测试中安全测试包含内容及安全测试怎么测

一、软件测试安全测试包含哪些 1. 漏洞扫描 漏洞扫描是软件测试安全测试的基础&#xff0c;它用于检测应用程序和系统中存在的已知漏洞。安全测试工具如AppScan、OWASP ZAP和Nessus等可以对应用程序进行自动化扫描&#xff0c;发现可能存在的漏洞&#xff0c;如跨站点脚本&am…

大象机器人开源协作机械臂机械臂接入GPT4o大模型!

本文已经或者同济子豪兄作者授权对文章进行编辑和转载 引言 随着人工智能和机器人技术的快速发展&#xff0c;机械臂在工业、医疗和服务业等领域的应用越来越广泛。通过结合大模型和多模态AI&#xff0c;机械臂能够实现更加复杂和智能化的任务&#xff0c;提升了人机协作的效率…

CTO透露GPT-5内幕,OpenAI 以36亿美元收购数据库初创公司

目录 01 GPT-5 02 OpenAI收购Rockset 2.1 谁是Rockset&#xff1f; 2.2 OpenAI的目的是什么&#xff1f; 01 GPT-5 虽然GPT-4的视频通话功能尚未全面推广&#xff0c;但OpenAI的CTO已经对即将到来的GPT-5给出了新的暗示。 不久前&#xff0c;Mira回到母校达特茅斯工程学…

jdk动态代理-基于反射的动态代理

JDK动态代理的示例图&#xff0c;下图的绿色箭头表示实现的关系&#xff0c;白色虚线表示依赖关系&#xff0c;target表示被ProxyFactory的target成员表示代理类对象&#xff0c;由ProxyFactory传入的Object参数初始化&#xff0c;接着调用getProxyInstance函数利用反射来返回代…

DMA学习笔记

参考文章 https://blog.csdn.net/as480133937/article/details/104927922 DMA简介 DMA&#xff0c;全称Direct Memory Access&#xff0c;即直接存储器访问。DMAC 即 DMA 控制器&#xff0c;提供了一种硬件的数据传输方式&#xff0c;无需 CPU 的介入&#xff0c;可以处理外…

LangGraph进阶:手把手教你打造电影脚本AI

LangGraph是著名的大模型开发框架LangChain推出的用于构建基于复杂工作流的LLM应用的开发库。LangGraph把任务的节点与关系用Graph结构来定义以支持更多样更复杂的应用场景&#xff0c;特别是&#xff1a; 实现包含循环、迭代等复杂工作流的高级RAG范式 需要更灵活控制的Agent…

QAM MMA

MMA是改进的CMA&#xff0c;有RCA和CMA的优点&#xff0c;还能对相位误差进行修正。 N 5e5; % 仿真符号数 M 16; % QAM16msg randi([0 M-1],N,1); % 产生随机符号 tx qammod(msg,M); % QAM调制test_snr 20:5:30; …

采用Java语言+开发工具 Idea+ scode数字化产科管理平台源码,产科管理新模式

采用Java语言开发工具 Idea scode数字化产科管理平台源码&#xff0c;产科管理新模式 数字化产科管理系统是现代医疗信息化建设的重要组成部分&#xff0c;它利用现代信息技术手段&#xff0c;对孕产妇的孕期管理、分娩过程及产后康复等各个环节进行数字化、智能化管理&#xf…

【总线】AXI4第七课时:AXI的额外的控制信息(PROT和CACHE)

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣&#xff0c;那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者&#xff0c;AXI4以其高性能和高度可扩展性&#xff0c;成为了现代电子系统中不可或缺的通信桥梁…

安乃达挂牌上交所:营收放缓净利润下滑,业绩风险如何规避?

《港湾商业观察》施子夫 7月3日&#xff0c;冲刺上交所主板刚满2年的安乃达驱动技术&#xff08;上海&#xff09;股份有限公司&#xff08;以下简称安乃达&#xff0c;603350.SH&#xff09;将正式挂牌上市。 据悉&#xff0c;此次安乃达公开发行数量为2900万股&#xff0c;…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【18】认证服务02—微博社交登录

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【18】认证服务02—微博社交登录 微博社交登录图示原理前置准备实现流程完整代码 参考 微博社交登录 OAuth&#xff1a; OAuth&#xff08;开放授权&#xff09;是一个开放标准&#xff0…

Python-Tkinter+Logging+Sqlserver项目结合

参考文章&#xff1a; https://www.jb51.net/article/283745.htm 目录&#xff1a; common(文件夹) – base.py – config_reader.py – dosqlserver.py – log.py txt&#xff08;空文件夹&#xff0c;后面会自动生成txt文件在该文件夹下面&#xff09; 1.txt 2.txt env.…