数据结构顺序表的操作,窗口界面(c语言版)

news2024/11/18 15:34:17
// 准备头文件
#include <stdio.h>
#include <stdlib.h>
 
#define InitSize 10     // 动态顺序表的初始默认长度
 
// 定义C语言的bool变量
#define bool char
#define true 1
#define false 0
 
/* 定义数据元素的数据类型 */
typedef int ElemType; // 方便更改
 
// 动态顺序表的结构体定义
typedef struct Sqlist_d
{
	ElemType *data;
	int length;
	int maxsize;
}Sqlist_d;
 
// 生成顺序表
Sqlist_d L2; 
// 动态顺序表的初始化
bool InitSqList_d(Sqlist_d *L)
{
	L->length = 0;
	L->maxsize = InitSize;
	// 为数据开辟空间
	L->data = (ElemType *)malloc(sizeof(ElemType) * InitSize);
 
	return true;
}
 
// 动态顺序表的插入
bool SqList_dInsert(Sqlist_d *L,int i,ElemType e)
{
	// 判断操作是否合法
	if(i < 1 || i > L->length + 1)
	{
		printf("插入位置不合法!\n");
		return false;
	}
	if(L->length >= L->maxsize)
	{
		printf("这个表已经满了。\n");
		return false;
	}
	// 将第i位元素及其后面的元素向后移一位
	int j; // length的长度刚好是当前最大下标加一
	for(j = L->length;j >= i;j--)
	{
		L->data[j] = L->data[j-1];
	}
	// 将新元素放到插入的位置
	L->data[i-1] = e;
	// 表长加1
	L->length++;
	// 插入成功返回true
	return true;
}
 

// 将顺序表中第i位元素删除并把它返回给e
// 动态顺序表的元素删除
bool SqList_dElemDelete(Sqlist_d *L, int i, ElemType *e)
{
	// 判断合法性
	if(i < 1 || i > L->length)
	{
		printf("删除位置不合法!\n");
		return false;
	}
	// 判空
	if(L->length == 0)
	{
		printf("这个表是空的!\n");
		return false;
	}
	// 将删除元素赋值给e
	*e = L->data[i-1];
	// 将第i位元素之后的元素向前移动一位
	int j; // 此时i若作为下标就是删除元素后一位的下标
	for(j = i; j < L->length; j++)
	{
		L->data[j-1] = L->data[j];
	}
	// 表长减一
	L->length--;
	return true;
 
}
 
// 动态顺序表的按值查找并返回其位序
int SqList_dLocElem(Sqlist_d L, ElemType e)
{
	int i;
	for(i = 0; i < L.length; i++)
	{
		if(L.data[i] == e)
		{
			return i + 1;
		}
	}
	return 0;
}
 
// 动态顺序表的扩容
bool IncreaseSize(Sqlist_d *L, int len)
{
	// 生成一个新指针指向原来数据的空间
	ElemType *p = L->data;
	// 开辟更大的空间
	L->data = (ElemType *)malloc(sizeof(ElemType) * (L->length + len));
	// 转移数据
	int i;
	for(i = 0; i < L->length; i++)
	{
		L->data[i] = p[i]; // p[i] === *p + i
	}
	// 修改最大长度
	L->maxsize += len;
	// 释放原来的空间
	free(p);
	return true;
}
 
// 动态顺序表的输出
bool Sqlist_dprint(Sqlist_d L)
{
	// 判空
	if(L.length == 0)
	{
		printf("这个顺序表为空!\n");
		return false;
	}
	// 输出
	printf("Sqlist_d;");
	int i;
	for(i = 0; i < L.length; i++)
	{
		printf("%d-->", L.data[i]);
	}
	printf("end\n");
 
	return true;
}
// 按位取值
bool SqList_dLoc(Sqlist_d *L, int i)
{
	if (i >= 1 && i <= L -> length)
	{
		printf("查找成功\n");
		printf("第%d位元素的信息是:%d\n", i, L -> data[i-1]);
		return true;
	}
	printf("查找失败!\n");
	return false;
}
void Begin(){
	printf("1.建立\n");
	printf("2.输入\n");
	printf("3.取值\n");
	printf("4.查找\n");
	printf("5.插入\n");
	printf("6.删除\n");
	printf("7.输出\n");
	printf("8.退出\n");
	int n;
	int flag = 1;
	while (flag)
		{
			printf("请选择:");
			scanf("%d", &n);
	        int m,m1;
	        int d,d1,d2,d3;
	        char s,j;
	        
    	switch (n){
			case 1:
				InitSqList_d(&L2);
				printf("成功建立顺序表!\n");
				break;
			case 2:

				printf("您希望输入几个元素:\n");
				scanf("%d", &m);
				printf("输入您的%d个元素,以创建顺序表。\n", m);
				int i;
				int s1;
				for(i = 0; i < m; i++)
				{
					printf("请输入第%d个元素:", i+1);
					scanf("%d", &s1);
					SqList_dInsert(&L2, i+1, s1);
				}
				break;
			case 3:
				printf("请输入一个位置来取值:");

				scanf("%d", &d);
				SqList_dLoc(&L2, d);
				break;
			case 4:
				printf("请输入一个值来查找它的位置:");
				scanf("%d", &d1);
				printf("%d的位置是:%d\n",d1,SqList_dLocElem(L2, d1));
				break;
			case 5:
				printf("请输入要插入的位置:");
				scanf("%d", &d2);
				printf("请输入要插入的值:");

				scanf("%d", &m1);
				j = SqList_dInsert(&L2, d2, m1);
				if (j)
					{
						printf("插入成功!\n");
					}
				break;
			case 6:
				printf("请输入你要删除的位置:");
				scanf("%d", &d3);
				ElemType c;
				s = SqList_dElemDelete(&L2, d3, &c);
				if (s)
				{
					printf("删除成功!\n");
				} 
				break;
			case 7:
				Sqlist_dprint(L2);
				break;
			case 8:
				flag = 0;
			
			 
			
	}
		}

	
}
 
int main()
{

    Begin();
 
	return 0;
}

效果:

 代码供参考,若有错误希望指出

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

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

相关文章

职场逆袭!如何打造‘黄金简历’

现在的职场&#xff0c;无论是哪个行业都特别卷&#xff0c;想要找到一份满意&#xff0c;不仅要求你要拥有丰富的工作经验&#xff0c;而且还要求你的简历足够精彩&#xff0c;这样才能在一众求职者中脱颖而出&#xff01; 一、希赛老师在线指导 之前&#xff0c;小赛分享了…

从0到1了解工业物联网,只需掌握这七点!

目录 1、什么是工业物联网&#xff1f; 2、为什么需要工业物联网&#xff1f; 3、工业物联网与物联网的区别&#xff1f; 4、工业物联网与工业互联网的区别&#xff1f; 5、工业物联网有哪些典型特征&#xff1f; 6、工业物联网方案架构&#xff1f; 7、工业物联网有哪些…

用了一个select框出现的问题许多问题差不多搞了一个多小时最后还是百度解决了,百度伟大

问题出现 问题描述 select 多选框里的数据问题&#xff0c;我讲获取的数据信息放入框ref(null) 中&#xff0c;将数据返回到返回框里&#xff0c;一直发现存在问题&#xff0c;不能正常显示&#xff0c;百度里一下&#xff0c;发现没有百度到其他问题&#xff0c;最后换了一种…

【网络安全】-数字证书

数字证书 数字证书是互联网通讯中用于标志通讯各方身份信息的一串数字或数据&#xff0c;它为网络应用提供了一种验证通信实体身份的方式。具体来说&#xff0c;数字证书是由权威的证书授权&#xff08;CA&#xff09;中心签发的&#xff0c;包含公开密钥拥有者信息以及公开密…

29个社媒营销经典案例!外贸人速来学习!

今天给大家分享一些比较经典的外贸社媒营销案例&#xff0c;希望对大家有帮助&#xff01; 01 创建重复的内容系列 如果你每天都在为决定要在社交媒体上发布什么内容而焦头烂额&#xff0c;那就创建一些你擅长的重复内容系列和主题。 例如&#xff0c;有人经常分享鼓舞人心的…

JAVA实战开源项目:校园失物招领管理系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 校园失物招领…

Java实现Tron(波场)区块链的开发实践(三)波场链水龙头、WEB3测试实战

上一节我们具体讲到Java实现Tron波场链的逻辑代码实现。 这一节我们通过部署和开发好的代码&#xff0c;针对测试链进行自测开发&#xff0c;准备测试环境。 1. 创建离线地址 首先我们需要一个离线地址&#xff0c;我们不需要在线进行创建&#xff0c;直接可以通过第一节的离…

py脚本模拟json数据,StructuredStreaming接收数据存储HDFS一些小细节 ERROR:‘path‘ is not specified

很多初次接触到StructuredStreaming 应该会写一个这样的案例 - py脚本不断产生数据写入linux本地&#xff0c; 通过hdfs dfs 建目录文件来实时存储到HDFS中 1. 指定数据schema&#xff1a; 实时json数据 2. 数据源地址&#xff1a;HDFS 3. 结果落地位置&#xff1a; HDFS …

PostgreSQL索引篇 | Hash索引

PostgreSQL版本为8.4.1 &#xff08;本文为《PostgreSQL数据库内核分析》一书的总结笔记&#xff0c;需要电子版的可私信我&#xff09; 索引篇&#xff1a; PostgreSQL索引篇 | BTreePostgreSQL索引篇 | GIN索引PostgreSQL索引篇 | Gist索引PostgreSQL索引篇 | TSearch2 全文…

哪里下载短视频素材?推荐几个短视频素材下载网站

当短视频行业的迅速崛起&#xff0c;剪辑影视短片的魅力无法抗拒&#xff0c;越来越多朋友爱看短视频&#xff0c;但从哪里找到高清、无水印和无字幕的短视频素材呢&#xff1f;今天&#xff0c;我将为大家推荐几个可获取短视频素材的优秀网站&#xff0c;下面让我们一起去看看…

使用helm部署clickhouse

&#xff08;作者&#xff1a;陈玓玏&#xff09; 前置条件 已安装 Kubernetes 集群&#xff1b; 已安装 Helm 包管理工具。 部署 1 添加 RadonDB ClickHouse 的 Helm 仓库 helm repo add ck https://radondb.github.io/radondb-clickhouse-kubernetes/ helm repo upd…

函数的传入参数-传参定义

基于函数的定义语法&#xff1a; def 函数名&#xff08;传入参数&#xff09;函数体return 返回值 可以有如下函数定义&#xff1a; def add(x,y):return xyprint(f"{x} {y}的结果是&#xff1a;{result}") 实现了&#xff0c;每次计算的是xy&#xff0c;而非…

raid0、raid1、raid5、raid10选哪个?一文给你答案!

下午好&#xff0c;我的网工朋友。 关于磁盘阵列的用法&#xff0c;总有朋友对其用途与功能一知半解&#xff0c;很容易弄混。 而我们在做监控项目存储时&#xff0c;经常会用到磁盘阵列。 什么是磁盘阵列&#xff1f;为什么要做磁盘阵列&#xff1f;用什么样的磁盘阵列合适…

三次握手,四次挥手基本概念及其抓包演示

目录 1.tcp三次握手 2.tcp四次挥手 3.思考问题(面试常考) 3.1 三次握手时可能出现什么攻击? 3.2 为什么是三次握手,可不可以是两次,为什么? ​编辑3.3 四次挥手的过程可以用三次完成吗? 4.抓包演示三次握手四次挥手 1.tcp三次握手 tcp协议特点:面向连接的,可靠的,流式…

Vue3 ElementPlus-table组件(合计)合并列

在使用ElementPlus的table组件的时候&#xff0c;我们通常会处理合计&#xff0c;当遇到合计行需要合并列的时候&#xff0c;可以这样做。 核心就是获取标签&#xff0c;对标签的CSS样式进行设置&#xff0c;以达到合并单元格的效果。 Template <el-tablemax-height"ca…

UnityShader常用算法笔记(颜色叠加混合、RGB-HSV-HSL的转换、重映射、UV序列帧动画采样等,持续更新中)

一.颜色叠加混合 1.Blend混合 // 正常&#xff0c;透明度混合 Normal Blend SrcAlpha OneMinusSrcAlpha //柔和叠加 Soft Additive Blend OneMinusDstColor One //正片叠底 相乘 Multiply Blend DstColor Zero //两倍叠加 相加 2x Multiply Blend DstColor SrcColor //变暗…

力扣:链表篇章

1、链表 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针的意思&#xff09;。 2、链表的类…

软件开发人员从0到1实现物联网项目:需求分析

文章目录 前言市场调研线下考察竞品参考 项目目标功能需求用户端功能需求商家功能需求系统管理功能需求 非功能需求性能安全性易用性扩展性可靠性 小结 前言 上文对实现自助棋牌室项目涉及到的技术做了调研&#xff0c;尤其是物联网技术。那接下来就是对需求进行一番分析了&am…

Swing不显示图片

文件在同一目录下&#xff0c;这样写运行不显示图片 把路径改为绝对路径 程序正常运行

ubuntu 23开机界面美化教程

效果 方法 GRUB开机界面美化 从上述网站中&#xff0c;查找GRUB Themes分类&#xff0c;并下载GRUB主题包&#xff08;tar.gz格式&#xff09;&#xff0c;如CyberSynchro.tar.gz&#xff1b; 解压下载得到的压缩包&#xff0c;得到CyberSynchro&#xff1b; 将CyberSynchro…