数据结构_顺序表中基本操作的实现_代码

学习笔记,仅供参考

1.头文件

2.初始化

3.增加值

4.根据下标取值

5.查找

6.插入

7.删除

8.动态增加数组的长度

9.所有代码

10.运行结果


1.头文件

//顺序表的实现——动态分配 
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
typedef struct{
	int *data;
	int MaxSize;
	int length;
}SeqList;

2.初始化

//初始化一个顺序表 
void InitList(SeqList &L){
	//使用malloc函数申请一片连续的存储空间
	L.data = (int*)malloc(InitSize*sizeof(int));
	L.length = 0;
	L.MaxSize = InitSize;
}

3.增加值

//增加值
void AddValue(SeqList &L,int num){
	for (int i = 0;i<num;i++){
		scanf("%d",&L.data[i]);
		L.length++;
	}
} 

4.根据下标取值

判断所给的下标是否越界。

//根据下标取值
bool GetElem(SeqList &L,int num,int &e){
	if (num<1 || num>L.length) return false;
	e = L.data[num-1];
	return true;
} 

5.查找

//查找
int LocateElem(SeqList &L,int y){
	for (int i = 0;i<L.length;i++){
		if(L.data[i] == y) return i+1;
	}
	return 0;
} 

6.插入

判断是否越界,同时L.length为前置++。

//插入
bool ListInsert(SeqList &L,int k,int kl){
	if (kl<1 || kl>L.length+1) return false;
	if (L.length == L.MaxSize) return false;
	for(int i = L.length-1;i>=kl-1;i--){
		L.data[i+1] = L.data[i];
	}
	L.data[kl-1] = k;
	++L.length;
	return true;
} 

7.删除

//删除
bool ListDelet(SeqList &L,int num){
	if (num<1 || num>L.length) return false;
	for(int i = num;i<L.length;i++){
		L.data[i-1] = L.data[i];
	}
	--L.length;
	return true;
} 

8.动态增加数组的长度

//动态增加数组的长度
void IncreaseSize(SeqList &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];
	}
	L.MaxSize = L.MaxSize+len;
	free(p);
} 

9.所有代码

//顺序表的实现——动态分配 
#include<stdio.h>
#include<stdlib.h>
#define InitSize 10
typedef struct{
	int *data;
	int MaxSize;
	int length;
}SeqList;
//初始化一个顺序表 
void InitList(SeqList &L){
	//使用malloc函数申请一片连续的存储空间
	L.data = (int*)malloc(InitSize*sizeof(int));
	L.length = 0;
	L.MaxSize = InitSize;
}

//增加值
void AddValue(SeqList &L,int num){
	for (int i = 0;i<num;i++){
		scanf("%d",&L.data[i]);
		L.length++;
	}
} 

//根据下标取值
bool GetElem(SeqList &L,int num,int &e){
	if (num<1 || num>L.length) return false;
	e = L.data[num-1];
	return true;
} 

//查找
int LocateElem(SeqList &L,int y){
	for (int i = 0;i<L.length;i++){
		if(L.data[i] == y) return i+1;
	}
	return 0;
} 

//插入
bool ListInsert(SeqList &L,int k,int kl){
	if (kl<1 || kl>L.length+1) return false;
	if (L.length == L.MaxSize) return false;
	for(int i = L.length-1;i>=kl-1;i--){
		L.data[i+1] = L.data[i];
	}
	L.data[kl-1] = k;
	++L.length;
	return true;
} 

//删除
bool ListDelet(SeqList &L,int num){
	if (num<1 || num>L.length) return false;
	for(int i = num;i<L.length;i++){
		L.data[i-1] = L.data[i];
	}
	--L.length;
	return true;
} 

//动态增加数组的长度
void IncreaseSize(SeqList &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];
	}
	L.MaxSize = L.MaxSize+len;
	free(p);
} 

int main(){
	SeqList L;
	int n,x;
	printf("请输入你要增加几条数据:");
	InitList(L);
	scanf("%d",&n); 
	//增加值 
	AddValue(L,n);
	
	printf("当前的数据为:") ;
	for(int i = 0;i<L.length;i++){
		printf("%d ",L.data[i]);
	}
	printf("\n");
	printf("当前顺序表的长度为:%d\n",L.length); 
	
	//根据下标找值 
	int e;
	printf("请输入你要取第几个值:");
	scanf("%d",&x); 
	if (GetElem(L,x,e)) printf("找到的第%d个值为%d\n",x,e);
	else printf("没有找到\n");
	//查找
	int y;
	printf("请输入你要查找的值:");
	scanf("%d",&y); 
	if (LocateElem(L,y)) printf("%d在第%d位置上\n",y,LocateElem(L,y));
	else printf("没有找到\n");
	//插入
	int k,kl;
	printf("请输入你要插入的值以及插入的位置:");
	scanf("%d %d",&k,&kl); 
	if(ListInsert(L,k,kl)) printf("现在第%d位置上的值变为了%d\n",kl,k);
	else printf("插入失败\n");
	
	printf("当前的数据为:") ;
	for(int i = 0;i<L.length;i++){
		printf("%d ",L.data[i]);
	}
	printf("\n");
	printf("当前顺序表的长度为:%d\n",L.length); 
	
	//删除
	int sc;
	printf("请输入你要删除第几个数据:");
	scanf("%d",&sc); 
	if(ListDelet(L,sc)) printf("删除成功\n");
	else printf("删除失败\n");
	 
	printf("当前的数据为:") ;
	for(int i = 0;i<L.length;i++){
		printf("%d ",L.data[i]);
	}
	printf("\n");
	printf("当前顺序表的长度为:%d\n",L.length); 
	
	//增加顺序表长度 
	int l;
	printf("请输入你要增加的长度:");
	scanf("%d",&l);
	IncreaseSize(L,l);
	printf("当前顺序表的最大长度为:%d\n",L.MaxSize); 
	return 0;
}

10.运行结果

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

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

相关文章

Arduino-点亮TFT触摸屏一

Arduino-点亮TFT触摸屏一 1.概述 这篇文章主要介绍Arduino操作TFT触摸屏入门操作&#xff0c;通过SPI通信协议方式点亮TFT触摸屏。 2.硬件电路 2.1.硬件列表 名称数量Arduino Uno12.8" TFT彩色液晶触摸屏模块&#xff08;ILI9431&#xff09;110K 电阻5面包板1杜邦线…

ICode国际青少年编程竞赛- Python-3级训练场-if语句入门

ICode国际青少年编程竞赛- Python-3级训练场-if语句入门 1、 for i in range(5):Spaceship.step(i 1)Spaceship.turnRight()if i 1:Dev.step(1)Dev.step(-1)2、 for i in range(4):Dev.step(2)if i ! 1:Dev.turnLeft()Dev.step(3)Dev.step(-3)Dev.turnRight()3、 for i…

springboot3项目练习详细步骤(第三部分:文章管理模块)

目录 发布文章 接口文档 业务实现 自定义参数校验 项目参数要求 实现思路 实现步骤 文章列表(条件分页) 接口文档 业务实现 mapper映射 更新文章 接口文档 业务实现 获取文章详情 接口文档 业务实现 删除文章 接口文档 业务实现 文章管理业务表结构…

OpenHarmony实战开发——WLAN驱动框架介绍及适配方法

1. WLAN 驱动框架概述 WLAN 是基于 HDF(Hardware Driver Foundation)驱动框架开发的模块&#xff0c;该模块可实现跨操作系统迁移、自适应器件差异、模块化拼装编译等功能。从而降低 WLAN 驱动开发的难度&#xff0c;减少 WLAN 驱动移植和开发的工作量。 本文主要分析 WLAN 驱…

gif压缩大小但不改变画质怎么做?分享5个压缩GIF原理~

GIF&#xff08;图形互换格式&#xff09;是网络上广泛使用的一种图像格式&#xff0c;因其支持动画而备受欢迎。然而&#xff0c;随着动画越来越复杂和高分辨率&#xff0c;GIF 文件大小也随之增加&#xff0c;可能导致加载速度变慢和带宽消耗增加。在这篇文章中&#xff0c;我…

easypoi动态表头导出数据

需求&#xff1a;动态导出某年某月用户和用户评分数据信息&#xff0c;表头(序号、姓名、用户姓名)&#xff0c;数据(所有用户对应的评分以及平均分)&#xff1b; 分析&#xff1a;1、表头除过序号、姓名&#xff0c;用户姓名要动态生成&#xff1b; 2、用户评分信息要和表头中…

Nginx+GateWay

目录 Nginx nginx如何配置负载均衡 负载均衡有哪些策略 1、轮询&#xff08;默认&#xff09; 2、指定权重 3、ip_hash&#xff08;客户端ip绑定&#xff09; 4、least_conn&#xff08;最少连接&#xff09; 5、fair 6、url_hash Nginx为什么效率高 gateway 使用gat…

Lobe Chat–在线AI对话聊天机器人,一键部署,免费开源

Lobe Chat 现代化设计的开源 ChatGPT/LLMs 聊天应用与开发框架 支持语音合成、多模态、可扩展的&#xff08;function call&#xff09;插件系统 一键免费拥有你自己的 ChatGPT/Gemini/Claude/Ollama 应用 项目演示 支持多种模型接口 支持语音输入输出 支持云端同步 丰富多彩非…

1013: 哈希表(开放定址法处理冲突)

解法&#xff1a; 线性探测是一种解决哈希冲突的方法&#xff0c;当发生哈希冲突时&#xff0c;它会依次往后查找空的槽位&#xff0c;直到找到一个空的槽位或者达到数组的末尾。 下面是处理哈希冲突的线性探测的步骤&#xff1a; 创建一个哈希表&#xff0c;里面包含一定数量的…

Ps 滤镜:视频

Ps菜单&#xff1a;滤镜/视频 Filter/Video “视频”滤镜子菜单中包含了“NTSC 颜色”和“逐行”两个滤镜。 这两个滤镜都是针对视频和电视播放的特定需求设计的。 “逐行”滤镜主要解决交错视频的视觉问题&#xff0c;而“NTSC 颜色”滤镜则确保色彩在电视播放时的兼容性和准确…

一文带你了解OSPF 七种LSA类型,很全!

大家好&#xff0c;今天我们 带大家了解一下OSPF的七种LSA类型。 在OSPF&#xff08;开放式最短路径优先&#xff09;协议中&#xff0c;LSA&#xff08;链路状态通告&#xff09;是一种至关重要的数据格式&#xff0c;专门用于描述路由信息。它包含了路由器或网络的各种状态信…

编写一个C#程序,实现音乐文件的播放功能

一、作业要求 要求1&#xff1a; 1. 程序应能够读取MP3文件&#xff0c;并播放其中的音频。 2. 程序应能够处理可能出现的异常&#xff0c;如文件不存在、文件读取错误等。 3. 程序应具有良好的用户界面&#xff0c;方便用户进行操作。 4. 程序应具有良好的兼容性&#xf…

VK6932 SOP32数码屏驱动IC抗干扰数显芯片高稳定LED驱动 原厂FAE支持

产品型号&#xff1a;VK6932 产品品牌&#xff1a;永嘉微电/VINKA 封装形式&#xff1a;SOP32 工程服务&#xff0c;技术支持&#xff01; 概述 VK6932是一种数码管或点阵LED驱动控制专用芯片&#xff0c;内部集成有3线串行接口、数据锁存器、LED 驱动等电路。SEG脚接LED阳…

【Python】selenium爬虫常见用法和配置,以及常见错误和解决方法

欢迎来到《小5讲堂》 这是《Python》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 前言无执行文件代码报错信息错误路径手动下载自动下载 选项配置Ch…

js之遍历方法

先创建一个数组&#xff0c;然后使用for.in进行遍历&#xff0c;如下图所示sub代表下标并且遍历几次&#xff0c;arr代表数组 <script>let arr [1, 2, 3, 4, 5, 6];for (let sub in arr) {console.log(arr);}</script> 第二种方法则是for循环遍历&#xff0c;根据…

Transformer 解析 超级详细版

推荐学习视频 汉语自然语言处理-从零解读碾压循环神经网络的transformer模型(一)- 注意力机制-位置编码-attention is all you need_哔哩哔哩_bilibili 目录 首先下transformer和LSTM的最大区别是什么&#xff1f; 1.positional \ encoding, 即位置嵌入(或位置编码); 2 自注…

windows连接CentOS数据库或Tomcat报错,IP通的,端口正常监听

错误信息 数据库错误&#xff1a; ERROR 2003 (HY000): Cant connect to MySQL server on x.x.x.x (10060) Tomcat访问错误&#xff1a; 响应时间过长 ERR_CONNECTION_TIMED_OUT 基础排查工作 【以下以3306端口为例&#xff0c;对于8080端口来说操作是一样的&#xff0c;只需…

NM2-WRDUW施耐德电动机保护器EOCR-NM2

EOCR智能电动机保护器原产地为韩国&#xff0c;隶属于施耐德(韩国)电气有限公司工厂。此公司早起源于韩国三和SAMWHA株式会社&#xff0c;是早研发电子式电动机保护器厂家&#xff0c;产品涵盖过电流继电器EOCR-SS,EOCR-SE2,EOCR-AR&#xff0c;欠电流继电器EUCR&#xff0c;数…

3分钟快速了解VR全景编辑器

说到VR全景&#xff0c;想必大多数人都见过那种可以360旋转拖动观看的图片。虽然这种技术已经不算新鲜&#xff0c;如果你以为这就是VR全景的全部&#xff0c;那就大错特错了&#xff01; 上面看到的这种形式&#xff0c;只能算VR全景的第一层形态。现在的VR全景已经发展成为了…

LabVIEW自动机械变速器(AMT)开发

LabVIEW自动机械变速器&#xff08;AMT&#xff09;开发 在现代汽车工业中&#xff0c;提升车辆的自动化水平和驾驶体验是一个不断追求的目标。随着技术的发展&#xff0c;自动机械变速器&#xff08;AutomatedMechanical Transmission, AMT&#xff09;凭借其较高的能效和较低…
最新文章