数据结构——顺序表中基本操作的实现

news2024/11/15 21:22:51

前言

该部分知识参考于《数据结构(C语言版 第2版)》24~28页

🌈每一个清晨,都是世界对你说的最温柔的早安:ૢ(≧▽≦)و✨


注意

这里的ElemType是以Book类型的数据作为举例,如果需要更改可以自行改变!


1、宏定义

#include<iostream>
#include <cstdlib>
using namespace std;

//控制最大值
#define MAXSiZE 1000
//声明Status用于记录返回结果
typedef int Status;
#define OK 1
#define ERROR 0

2、对存储的数据内容进行定义

//定义书的基本数据项
typedef struct
{
	char no[20];
	char name[50];
	float peice;
}Book;
//定义顺序表的数据元素
typedef struct
{
	Book* elem;
	int length;
}SqList;

//声明顺序表
SqList L;

3、初始化顺序表

//定义书的基本数据项
typedef struct
{
	char no[20];
	char name[50];
	float peice;
}Book;
//定义顺序表的数据元素
typedef struct
{
	Book* elem;
	int length;
}SqList;

//声明顺序表
SqList L;

4、销毁顺序表

//销毁
void DestoryList(SqList& L)
{
	if (L.elem)
		delete[]L.elem; //回收指针空间
}

5、清空顺序表

//清空
void Clear(SqList& L)
{
	L.length = 0; //将线性表的表长重置
}

6、求线性表的长度

//求线性表的长度
int GetLength(SqList L)
{
	return L.length;
}

7、判空

//判空
int IsEmpty(SqList L)
{
	if (L.length == 0)
		return 1;
	return 0;
}

8、取值

取值操作根据指定的位置下标来进行,查找到所在位置下标的数据后传给e,然后将e通过引用传回主函数部分

//取值
Status GetElem(SqList L, int i, Book& e)
{
	if (i < 1 || i > L.length)
		return ERROR;
	e = L.elem[i - 1];
	return OK;
}

9、查找

查找是根据指定的元素e,查找顺序表中第1个值与e相等的元素。若查找成功,则返回该元素在表中的位置序;若查找失败。则返回0。

//查找
int LocateElem(SqList L, Book e)
{
	for (int i = 0; i < L.length; i++)
	{
		if (strcmp(L.elem[i].no, e.no) == 0)
			return i + 1;
	}
	return OK;
}

10、插入

//插入
Status ListInsert(SqList& L, int i, Book e)
{
	if (i < 1 || i > L.length + 1)//插入位置可以是最后一个元素的后面
		return ERROR;
	if (L.length == MAXSiZE)
		return ERROR;
	for (int j = L.length - 1; j >= i - 1; j--)
	{
		L.elem[j + 1] = L.elem[j];
	}
	L.elem[i - 1] = e;
	L.length++;
	return OK;
}

11、删除

//删除
Status ListDelete(SqList& L, int i, Book& e)
{
	if (i<1 || i>L.length)//判断位置是否合法
	{
		return ERROR;
	}
	e = L.elem[i - 1]; //将删除的值赋予e,达到一个返回的作用
	for (int j = i; j <= L.length - 1; j++)
	{
		L.elem[j - 1] = L.elem[j];
	}
	L.length--;
	return OK;
}

12、总代码

#include<iostream>
#include <cstdlib>
using namespace std;

//控制最大值
#define MAXSiZE 1000
//声明Status用于记录返回结果
typedef int Status;
#define OK 1
#define ERROR 0

//定义书的基本数据项
typedef struct
{
	char no[20];
	char name[50];
	float peice;
}Book;
//定义顺序表的数据元素
typedef struct
{
	Book* elem;
	int length;
}SqList;

//声明顺序表
SqList L;



//创建
Status InitList(SqList &L)
{
	L.elem = new Book[MAXSiZE];
	if (!L.elem)
		exit(EXIT_FAILURE);
	L.length = 0;
	return OK;
}

//销毁
void DestoryList(SqList& L)
{
	if (L.elem)
		delete[]L.elem; //回收指针空间
}

//清空
void Clear(SqList& L)
{
	L.length = 0; //将线性表的表长重置
}

//求线性表的长度
int GetLength(SqList L)
{
	return L.length;
}

//判空
int IsEmpty(SqList L)
{
	if (L.length == 0)
		return 1;
	return 0;
}

//取值
Status GetElem(SqList L, int i, Book& e)
{
	if (i < 1 || i > L.length)
		return ERROR;
	e = L.elem[i - 1];
	return OK;
}

//查找
int LocateElem(SqList L, Book e)
{
	for (int i = 0; i < L.length; i++)
	{
		if (strcmp(L.elem[i].no, e.no) == 0)
			return i + 1;
	}
	return OK;
}

//插入
Status ListInsert(SqList& L, int i, Book e)
{
	if (i < 1 || i > L.length + 1)//插入位置可以是最后一个元素的后面
		return ERROR;
	if (L.length == MAXSiZE)
		return ERROR;
	for (int j = L.length - 1; j >= i - 1; j--)
	{
		L.elem[j + 1] = L.elem[j];
	}
	L.elem[i - 1] = e;
	L.length++;
	return OK;
}

//删除
Status ListDelete(SqList& L, int i, Book& e)
{
	if (i<1 || i>L.length)//判断位置是否合法
	{
		return ERROR;
	}
	e = L.elem[i - 1]; //将删除的值赋予e,达到一个返回的作用
	for (int j = i; j <= L.length - 1; j++)
	{
		L.elem[j - 1] = L.elem[j];
	}
	L.length--;
	return OK;
}

int main()
{
	InitList(L);
	Book book1 = { "001","数据结构",59 };
	ListInsert(L, 1, book1);

	Book book2 = { "002","计算机网络",23.6 };
	ListInsert(L, 1, book2);

	int length = GetLength(L);

	Book book3;
	GetElem(L, 2, book3);
	cout << book3.name<<"  "<< book3.peice << endl;
	cout << length << endl;
}

 测试结果


结语

这里的代码对于初学者读起来有些困难,因为这里面穿插使用着C和C++语言,如果有不懂的可以在后台私信,如有不足也希望可以指正

对于顺序表不仅仅只有一种固定方法来写,大体思路学会后可以自己尝试出自己的风格,奋斗!

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

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

相关文章

基于SpringBoot的古城墙景区管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的古城墙景区管理系…

【C++题解】1275. 输出杨辉三角的前N行

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1275. 输出杨辉三角的前N行 类型&#xff1a;二维数组 题目描述&#xff1a; 输出杨辉三角的前 N 行( N<10 )。 输入&#xff1a; 输入只有一行&#xff0c;包括 1 个整数 N …

【Unity】【游戏开发】unity中快速导入VRM模型并应用动画

【背景】 之前介绍了不少通过Blender为中介,Match Rig应用Mixamo动画后导入Unity的方法。不过由于texture等的问题,这种方法有时显得效率太低,还需要自己改写材质的nodes,避免导入Unity后出现不适应。所以本篇寻求更高效的下载和导入VRM模型,Mixamo动画到Unity的方法。 …

2024 年 8 月区块链游戏研报:用户增长与加密货币市场波动并存

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics Games Research 页面 8 月&#xff0c;加密货币市场面临严峻挑战&#xff0c;比特币和以太币的价值都大幅下跌。比特币下跌了 9.3%&#xff0c;而以太坊的跌幅更为严重&#x…

Resnet图像识别入门——池化层

前面的文章[Resnet图像识别入门——激活函数]介绍了3中常见的激活函数&#xff0c;以及激活函数在神经网络中的作用。 在CNN网络中&#xff0c;除了激活函数之外&#xff0c;还有一种算法也是很常见的&#xff0c;那就是池化层。在Resnet50中&#xff0c;就存在一个最大池化层…

VSCode GDB调试控制台只能查看变量不能执行调试命令的解决方案-var-create: unable to create variable object

背景 在使用VSCode进行GDB调试时&#xff0c;想使用x命令看一下某地址处的数值。然而&#xff0c;却给了报错而不显示&#xff1a; -var-create: unable to create variable object 这是啥原因呢&#xff1f; 解决方案 其实&#xff0c;在刚刚开始调试程序时&#xff0c;就以…

大数据Flink(一百一十四):PyFlink的作业开发入门案例

文章目录 PyFlink的作业开发入门案例 一、批处理的入门案例 1、示例 2、​​​​​​​​​​​​​​开发步骤 3、参考代码&#xff1a;基于DataStreamAPI编程 二、​​​​​​​​​​​​​​流处理的入门案例 1、​​​​​​​​​​​​​​示例 2、​​​​​…

2024年10款好用的文件加密软件!企业文件防泄密最佳选择

在数字化时代&#xff0c;数据安全已成为企业生存和发展的关键。随着企业数据量的不断增长&#xff0c;如何有效保护敏感信息免受未经授权的访问和泄露&#xff0c;成为企业面临的重要挑战。文件加密软件作为一种有效的数据保护工具&#xff0c;能够帮助企业确保数据的安全性和…

手机投屏到电脑怎么弄?

远程看看是一款免费的远程控制软件&#xff0c;它支持Windows、iOS和Android等多个系统&#xff0c;并且提供了文件传输、手机投屏、在线聊天等多种功能。我们可以使用远程看看软件进行手机投屏&#xff0c;从而帮助您的家人或朋友解决相应的手机问题。 1. 首先&#xff0c;将…

【运维方案】信息系统运维方案(Word完整版)

1 编制目的 2 系统运行维护 2.1 系统运维内容 2.2 日常运行维护方案 2.2.1 日常巡检 2.2.2 状态监控 2.2.3 系统优化 2.2.4 软件系统问题处理及升级 2.2.5 系统数据库管理维护 2.2.6 灾难恢复 2.3 应急运行维护方案 2.3.1 启动应急流程 2.3.2 成立应急小组 2.3.3 应急处理过程 …

如何给电脑设置静态IP地址:详细步骤与指南

在日常生活和工作中&#xff0c;我们经常需要使用电脑连接到网络。通常情况下&#xff0c;电脑会自动获取IP地址&#xff0c;但有时候&#xff0c;由于特定的网络需求或配置&#xff0c;我们可能需要手动为电脑设置静态IP地址。本文将详细介绍如何在Windows和Mac操作系统中为电…

操作系统 ---- 【2.3】进程控制

零、学习路线 一、什么是进程控制&#xff1f; 进程控制是进程管理中最基本的功能&#xff0c;主要包括创建新进程、终止已完成的进程、将因发生异常情况而无法继续运行的进程置于阻塞状态、负责进程运行中的状态转换等功能。如当一个正在执行的进程因等待某事件而暂时不能继续…

828华为云征文|docker部署overleaf搭建属于自己的论文编辑服务

1.介绍 1.1 什么是华为云Flexus X实例 最近华为云828 B2B企业节正在举办&#xff0c;Flexus X实例的促销也非常给力&#xff0c;大家可以去看看。特别是对算力性能有要求&#xff0c;同时对自建MySQL、Redis、Nginx性能有要求的小伙伴&#xff0c;千万不要错过。Flexus云服务器…

mysql datatime数据类型比实际多一秒问题

问题&#xff1a; 在项目上突然发现两个同一个Date时间存入数据库&#xff08;datetime类型&#xff09;和按照yyyy-MM-dd HH:mm:ss格式化时候有时候会相差一秒。 如下图&#xff1a; 格式为字符串为2024-09-10 14:18:41 存入数据库为2024-09-10 14:18:42 原因 SimpleDateF…

蚂蚁数科,独行的170天和未来新征程

文&#xff5c;白鸽 编&#xff5c;王一粟 9月5日&#xff0c;是赵闻飙上任蚂蚁数科公司首任CEO的第170天&#xff0c;也是蚂蚁数科独立运营的第170天。 在此期间&#xff0c;赵闻飙和蚂蚁数科都经历了角色上的转变。 “接手蚂蚁数科的170天里&#xff0c;我一直在思考一个…

如果美国衰退现货黄金市场怎样分析

近期美国的制造业PMI与劳动力市场超预期地下滑&#xff0c;这令市场对于美国经济“硬着陆”的预期有所增强。7月美国非农就业数据的大幅下降&#xff0c;触发了“萨姆规则”&#xff0c;该指标用于预测经济衰退的开始&#xff0c;而且自从1950年以来&#xff0c;每次都能成功识…

掌握LLM大模型基础!你的AI知识库升级秘籍在这里!

在这个已经被AI大模型包围的时代&#xff0c;不了解一点大模型的基础知识和相关概念&#xff0c;可能出去聊天都接不上话。刚好近期我也一直在用GPT和GitHub Copilot&#xff0c;也刚好对这些基础知识很感兴趣&#xff0c;于是学习了一下&#xff0c;做了如下的整理总结&#x…

CSP-J 算法基础 排序算法的基本概念

文章目录 前言排序算法的稳定性稳定排序算法的例子不稳定排序算法的例子总结 有序度和逆序度有序度&#xff08;Sortedness&#xff09;逆序度&#xff08;Inversion Count&#xff09;计算逆序度的例子 总结 满有序度计算公式解释举个例子总结 总结 前言 排序算法是计算机科学…

代币化资产如何拯救 DeFi:让金融重回价值创造的正轨

在过去几年中&#xff0c;去中心化金融&#xff08;DeFi&#xff09;已成为加密领域的热门话题&#xff0c;吸引了大量投资者和开发者。然而&#xff0c;随着行业的发展&#xff0c;DeFi市场逐渐暴露出一些根本性问题&#xff0c;使得其增长潜力受到限制。以太坊联合创始人Vita…

携手浙商证券、华锐技术,共话交易技术的创新与应用

秉承“虚已者进德之基&#xff0c;求同存异谓之共赢”的理念&#xff0c;浙商证券联合非凸科技、华锐技术于8月28日在深圳举办了“量化机遇汇浙&#xff0c;交易技术共商”鑫管家私募沙龙纷享会。此次活动汇聚了众多优秀管理人与资方代表&#xff0c;分享前沿观点&#xff0c;探…