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

news2024/11/24 19:29:41

学习笔记,仅供参考

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.coloradmin.cn/o/1660546.html

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

相关文章

【NodeMCU实时天气时钟温湿度项目 6】解析天气信息JSON数据并显示在 TFT 屏幕上(心知天气版)

今天是第六专题&#xff0c;主要内容是&#xff1a;导入ArduinoJson功能库&#xff0c;借助该库解析从【心知天气】官往返回的JSON数据&#xff0c;并显示在 TFT 屏幕上。 如您需要了解其它专题的内容&#xff0c;请点击下面的链接。 第一专题内容&#xff0c;请参考&a…

【活动】如何通过AI技术提升内容生产的效率与质量

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 如何通过AI技术提升内容生产的效率与质量引言一、自然语言处理&#xff08;NLP&…

k8s个人认知理解

pod的定义 pod里面有容器&#xff0c;所以pod就是一个容器组&#xff0c;一个pod里面可以有多个容器也可以有一个容器&#xff0c;最低只能有一个容器&#xff0c;目前现在主流使用的都是一个pod里面一个容器&#xff0c;同一个pod里面的容器&#xff0c;需要紧耦合。配置文件…

【问题分析】锁屏界面调起google语音助手后壁纸不可见【Android 14】

1 问题描述 为系统和锁屏分别设置两张不同的壁纸&#xff0c;然后在锁屏界面长按Power调起google语音助手后&#xff0c;有时候会出现壁纸不可见的情况&#xff0c;如以下截图所示&#xff1a; 有的时候又是正常的&#xff0c;但显示的也是系统壁纸&#xff0c;并非是锁屏壁纸…

测试环境搭建整套大数据系统(十六:超级大文件处理遇到的问题)

一&#xff1a;yarn出现损坏的nodemanger 报错现象 日志&#xff1a;1/1 local-dirs usable space is below configured utilization percentage/no more usable space [ /opt/hadoop-3.2.4/data/nm-local-dir : used space above threshold of 90.0% ] ; 1/1 log-dirs usabl…

深入理解卷积函数torch.nn.Conv2d的各个参数以及计算公式(看完写模型就很简单了)

代码解释帮助理解&#xff1a; torch.randn(10, 3, 32, 32)&#xff0c;初始数据&#xff1a;(10, 3, 32, 32)代表有10张图片&#xff0c;每张图片的像素点用三个数表示&#xff0c;每张图片大小为32x32。&#xff08;重点理解这个下面就好理解了&#xff09; nn.Conv2d(3, 64…

ESP32引脚入门指南(六):从理论到实践(UART)

ESP32开发板具有UART0、UART1和UART2三个UART接口&#xff0c;支持异步通信(RS232和RS485)和IrDA速率高达5mbps。这些接口提供了丰富的串行通信选项&#xff0c;允许与各种设备进行全双工通信。 UART接口概述与引脚配置 UART 是一种全双工通信协议&#xff0c;允许数据同时在…

C++_红黑树的学习

1. 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red 或 Black 。 通过对 任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍 &…

06.配置邮件报警

配置邮件报警 我的授权码&#xff1a;HCHNVOAENURLOACG 1.定义发件人 密码是163邮箱的授权码 2.配置收件人 我就配置收件人是qq邮箱了 3.启动动作 验证邮件发送成功

2024年湖北省专升本C语言程序设计大题真题解析

2024年湖北省的专升本考试已于4月30日举行&#xff0c;考试中&#xff0c;出现了许多不同的考试题目&#xff0c;我在网上找到一所高校专升本的大题&#xff08;好像是湖北师范的&#xff0c;后续会有湖北理工的大题真题解析&#xff0c;敬请期待&#xff09;&#xff0c;那么我…

Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件)

前言 Adobe Photoshop 是一款专业强大的图片处理工具&#xff0c;从照片编辑和合成到数字绘画、动画和图形设计&#xff0c;一流的图像处理和图形设计应用程序是几乎每个创意项目的核心所在。利用 Photoshop 在桌面上的强大功能&#xff0c;您可以在灵感来袭时随时随地进行创作…

通义千问2.5中文能力地表最强

随着人工智能技术的不断进步&#xff0c;智能问答系统已成为人们日常生活中不可或缺的一部分。阿里巴巴集团作为全球领先的科技公司&#xff0c;一直致力于AI领域的研发和创新。最近&#xff0c;阿里巴巴发布了其最新的智能问答系统——通义千问2.5。 通义千问2.5在AI问答领域…

ETL中如何执行Python脚本

Python的解读 Python 是一种高级、通用的编程语言&#xff0c;由荷兰程序员吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;于1990年代初设计并发布。Python的设计哲学强调代码的可读性和简洁性&#xff0c;它的语法清晰且表达力强&#xff0c;使得开发者能够以更少的代…

Python | Leetcode Python题解之第71题简化路径

题目&#xff1a; 题解&#xff1a; class Solution:def simplifyPath(self, path: str) -> str:names path.split("/")stack list()for name in names:if name "..":if stack:stack.pop()elif name and name ! ".":stack.append(name)re…

【鸟叔的Linux私房菜】1-Linux是什么与如何学习

文章目录 Linux是什么Linux的发展Linux的内核版本 Linux的学习学习方法学习重点处理问题 总结 Linux是什么 Linux是一个操作系统&#xff0c;包括内核和系统调用。开源的操作系统。 同一个操作系统无法在不同的硬件上运行&#xff0c;将操作系统修改代码从一个硬件平台迁移到…

react+antd --- 日期选择器,动态生成日期表格表头

先看一下效果---有当前月的日期 技术: 1: react 2:antd-UI库 -- table 3:moment--时间处理库 代码效果: import { Button, DatePicker, Table } from antd; import { useEffect, useState } from react; import moment from moment;function Club() {const [selecte…

Java毕业设计 基于SpringBoot vue新能源充电系统

Java毕业设计 基于SpringBoot vue新能源充电系统 SpringBoot 新能源充电系统 功能介绍 首页 图片轮播 充电桩 充电桩类型 充电桩详情 充电桩预约 新能源公告 公告详情 登录注册 个人中心 余额充值 修改密码 充电桩报修 充电桩预约订单 客服 后台管理 登录 个人中心 修改密码…

怎样用Python语言实现远程控制两路开关

怎样用Python语言实现远程控制两路开关呢&#xff1f; 本文描述了使用Python语言调用HTTP接口&#xff0c;实现控制两路开关&#xff0c;两路开关可控制两路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能…

并行执行的4种类别——《OceanBase 并行执行》系列 4

OceanBase 支持多种类型语句的并行执行。在本篇博客中&#xff0c;我们将根据并行执行的不同类别&#xff0c;分别详细阐述&#xff1a;并行查询、并行数据操作语言&#xff08;DML&#xff09;、并行数据定义语言&#xff08;DDL&#xff09;以及并行 LOAD DATA 。 《并行执行…

新能源 锂电池行业创业的财富方案,锂电池回收实战攻略课(36节课)

实战攻略 12年锂电池回收行业经验与坑全收录 课程内容&#xff1a; 001-课程介绍.mp4 002-锂电池的全种类认识.mp4 003-废品锂电池到级片粉末价值估算,mp4 004-锂电池的生产应用回收,mp4 005-梯次回收到粉未提纯全流程,mp4 006-锂电池行业术语,mp4 007-回收所需必备工具…