顺序表的使用,对数据的增删改查

news2025/3/1 16:14:05

主函数: 3.c

#include "3.h"//头文件调用
SqlListptr sql_cerate()//创建顺序表函数
{
	SqlListptr ptr=(SqlListptr)malloc(sizeof(SqlList));//在堆区申请连续的空间
	if(NULL==ptr)
	{
		printf("创建失败\n");
		return NULL;//如果没有申请成功,返回空,避免野指针
	}
	printf("创建成功\n");
	return ptr;//返回地址
	ptr->len=0;//len置为零
	bzero(ptr->date,sizeof(ptr->date));//对内容置零
}

int emtp(SqlListptr ptr)//判空
{
	if(NULL==ptr)
	{
		printf("判空失败\n");
		return -1;
	}
	return ptr->len==0;
}

int full(SqlListptr ptr)//判满
{
	if(NULL==ptr)
	{
		printf("判满失败\n");
		return -1;
	}
	return ptr->len==max;
}
int add(SqlListptr ptr,Date_Type  a)//增加
{
	if(NULL==ptr||full(ptr))
	{
		printf("增加失败\n");
		return 0;
	}
	ptr->date[ptr->len]=a;
	ptr->len++;
	return 1;

}
void show(SqlListptr ptr)//打印
{
	if(NULL==ptr||emtp(ptr))
	{
		printf("输出失败\n");
		return ;
	}
	for(int i=0;i<ptr->len;i++)
	{
		printf("%d ",ptr->date[i]);
	}
	putchar(10);
}
void  insert(SqlListptr ptr,int n,Date_Type a )//任意位置插入
{
	if(NULL==ptr||full(ptr)||n>ptr->len+1)
	{
		printf("插入失败\n");
		return ;
	}
	for(int i=0;i<ptr->len-n+1;i++)
	{
		ptr->date[ptr->len-i]=ptr->date[ptr->len-1-i];
	}

	ptr->date[n-1]=a;
		ptr->len++;
}
void anydel(SqlListptr ptr ,int n)//任意位置删除
{
	if(NULL==ptr||emtp(ptr)||n>ptr->len)
	{
		printf("删除失败\n");
		return;
	}
	for(int i=0;i<ptr->len-n;i++)
	{
		ptr->date[n-1+i]=ptr->date[n+i];
	}
	ptr->len--;
}

void change(SqlListptr ptr ,int n,Date_Type a)//任意修改
{

	if(NULL==ptr||emtp(ptr)||n>ptr->len)
	{
		printf("修改失败\n");
		return ;
	}
	ptr->date[n-1]=a;
}
void search(SqlListptr ptr,int n)//按位查找
{
	if(NULL==ptr||emtp(ptr)||n>ptr->len)
	{
		printf("查找失败\n");
		return;
	}
	printf("%d\n",ptr->date[n-1]);
}

int SearchValue(SqlListptr ptr,Date_Type n)//按值查找
{
	if(NULL==ptr||emtp(ptr))
	{
		return 0;
	}
	int flag=1;
	for(int i=0;i<ptr->len;i++)
	{
		if(n==ptr->date[i])
		{
			return i;
			flag=0;
		}
	}
	if(flag==0)
	{
		printf("没有该数据\n");
	}

}
void deduplicate(SqlListptr ptr)//去重
{
	if(NULL==ptr||ptr->len<2)
	{
		printf("去重失败\n");
	}
	for(int i=0;i<ptr->len;i++)
	{
		for(int j=i+1;j<ptr->len;j++)
		{
			if(ptr->date[i]==ptr->date[j])
			{
				anydel(ptr,j+1);
				j--;
			}
		}
	}
}
void myfree(SqlListptr *ptr)//销毁,释放内存
{
	if(NULL==ptr)
	{
		printf("销毁失败\n");
	}
	free(*ptr);
	printf("销毁成功\n");
	ptr=NULL;
}

头文件 3.h

#ifndef __3_h__//避免重复引用
#define __3_h__
#include<stdlib.h>//堆空间申请函数头文件
#include<string.h>
#include<stdio.h>//输入输出函数头文件
#define max 30//
typedef int Date_Type;//重定义

typedef struct sequence//重定义
{
	Date_Type date[max];
	int len;
}SqlList,*SqlListptr//重定义名
;
SqlListptr sql_cerate();//函数声明

int emtp(SqlListptr ptr);//判空

int full(SqlListptr ptr);//判满

int add(SqlListptr ptr,int a);//增加

void show(SqlListptr ptr);//打印

void insert(SqlListptr ptr,int n,Date_Type a);//任意插

void anydel(SqlListptr ptr ,int n);//任意删

void change(SqlListptr ptr,int n,Date_Type a);//按位置修改

void search(SqlListptr ptr,int n);//按位置查找

int  SearchValue(SqlListptr ptr,Date_Type n);//按数值查找

void deduplicate(SqlListptr ptr);//去重

void myfree(SqlListptr *ptr);//销毁,释放内存
#endif

测试函数main:4.c

include "3.h"//头文件引用
int main()
{
SqlListptr s=sql_cerate();//函数调用

	add(s,10);
	add(s,20);//一=依次尾插
	add(s,30);
	add(s,40);
	add(s,30);
	show(s);//打印
	int b=0;
	int flag=1;
	while(flag)
{
	printf("*************************************************************\n");
	printf("1,任意插入\t\t2.任意删除\t\t3.任意修改\n");
	printf("4.按下标查找\t\t5.按数值查找\t\t6.去重\n");
	printf("7.退出\t\t8.销毁文件\n");
	printf("**************************************************************\n");
	printf("请输入功能:\n");
	scanf("%d",&b);
switch(b)
	{
case 1:
		{	
		printf("请输入要在什么位置传值:");
		int n1=0;
		scanf("%d",&n1);
		insert(s,n1,60);//任意插
		show(s);//打印
		break;
		}
case 2:
		{
		printf("请输入要在什么位置删除:");
		int n2=0;
		scanf("%d",&n2);
		anydel(s,n2);//任意删
		show(s);//打印
		break;
		}
case 3:
		{
		printf("请输入要在什么位置修改:");
		int n3=0;
		scanf("%d",&n3);
		change(s,n3,66);
		show(s);
		break;
		}
case 4:
		{
		printf("请输入需要查哪一个:");
		int n4=0;
		scanf("%d",&n4);
		search(s,n4);
		break;
		}
case 5:
		{
		printf("请输入需要查哪一个:");
		int n5=0;
		int a;
		scanf("%d",&n5);
		a=SearchValue(s,n5);
		printf("该数据第为%d个数据\n",a);
		break;
		}
case 6:
		{
		deduplicate(s);//去重
		show(s);
		break;
		}
case 7:
		{
		flag=0;//置零,跳出循环
		}
	
case 8:
		{
			myfree(&s);//调用销毁函数,释放内存
			s=NULL;
		}
	}
	}
return 0;

}

运行截图:

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

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

相关文章

利用卷积神经网络进行手写数字的识别

数据集介绍 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;数据集是一个广泛使用的手写数字识别数据集&#xff0c;常用于机器学习和计算机视觉领域中的分类任务。它包含了从0到9的手写数字样本&#xff0c;常用于训练和测试各种图像…

题解 - 取数排列

题目描述 取1到N共N个连续的数字&#xff08;1≤N≤9&#xff09;&#xff0c;组成每位数不重复的所有可能的N位数&#xff0c;按从小到大的顺序进行编号。当输入一个编号M时&#xff0c;就能打印出与该编号对应的那个N位数。例如&#xff0c;当N&#xff1d;3时&#xff0c;可…

如何在 ASP.NET Core 3.1 应用程序中使用 Log4Net

介绍 日志记录是应用程序的核心。它对于调试和故障排除以及应用程序的流畅性非常重要。 借助日志记录&#xff0c;我们可以对本地系统进行端到端的可视性&#xff0c;而对于基于云的系统&#xff0c;我们只能提供一小部分可视性。您可以将日志写入磁盘或数据库中的文件&#xf…

监控易监测对象及指标之:宝兰德中间件JMX监控指标解读

监控易作为一款全面的IT监控软件&#xff0c;能够为企业提供深入、细致的监控服务&#xff0c;确保企业IT系统的稳定运行。在本文中&#xff0c;我们将详细解读监控易针对宝兰德中间件JMX的监控指标&#xff0c;以帮助用户更好地理解和应用这些监控数据。 监测指标概览&#x…

Ubuntu 安装 Samba Server

在 Mac 上如何能够与Ubuntu 服务器共享文件夹&#xff0c;需要在 Ubuntu 上安装 Samba 文件服务器。本文将介绍如何在 Ubuntu 上安装 Samba 服务器从而达到以下目的&#xff1a; Mac 与 Ubuntu 共享文件通过用户名密码访问 安装 Samba 服务 sudo apt install samba修改配置文…

数字化招聘系统如何帮助企业实现招聘效率翻倍提升?

众所周知&#xff0c;传统的招聘方式已经难以满足现代企业对人才的需求&#xff0c;而数字化招聘系统的出现&#xff0c;为企业提供了全新的解决方案。通过数字化招聘系统&#xff0c;企业可以自动化处理繁琐的招聘流程&#xff0c;快速筛选合适的候选人&#xff0c;从而大幅提…

C语言数组和字符串笔记

C语言数组和字符串笔记 1. 数组及其相关概念 1.1 为什么需要使用数组&#xff1f; 数组是一个有序的、类型相同的数据集合。这些数据被称为数组的元素。每个数组都有一个名字&#xff0c;数组名代表数组的起始地址。数组的元素通过索引或下标访问&#xff0c;索引从0开始。 …

u-boot移植、配置、编译学习笔记【刚开始就中止了】

教程视频地址 https://www.bilibili.com/video/BV1L24y187cK 【这个视频中途停更了…原因是实际中需要去改u-boot的情况比较少】 使用的u-boot的源码 视频中使用的是 u-boot-2017.03 学习到这里&#xff0c;暂停u-boot的移植、配置、编译学习&#xff0c;原因是经过与老师…

回归任务与分类任务应用及评价指标

能源系统中的回归任务与分类任务应用及评价指标 一、回归任务应用1.1 能源系统中的回归任务应用1.1.1 能源消耗预测1.1.2 负荷预测1.1.3 电池健康状态估计&#xff08;SOH预测&#xff09;1.1.4 太阳能发电量预测1.1.5 风能发电量预测 1.2 回归任务中的评价指标1.2.1 RMSE&…

【树莓派4B】MindSpore lite 部署demo

一个demo&#xff0c;mindspore lite 部署在树莓派4B ubuntu22.04中&#xff0c;为后续操作开个门&#xff01; 环境 开发环境&#xff1a;wsl-ubuntu22.04分发版部署环境&#xff1a;树莓派4B&#xff0c;操作系统为ubuntu22.04mindspore lite版本&#xff1a;mindspore-li…

AI监控赋能健身馆与游泳馆全方位守护,提升安全效率

一、AI视频监控技术的崛起 随着人工智能技术的不断发展&#xff0c;AI视频监控正成为各行业保障安全、提升效率的关键工具。相比传统监控系统&#xff0c;AI技术赋予监控系统实时分析、智能识别和精准预警的能力&#xff0c;让“被动监视”转变为“主动防控”。 二、AI监控应用…

M|林中小屋

title: 林中小屋 The Cabin in the Woods time: 2024-12-13 周五 rating: 7 豆瓣: 7.6 上映时间: “2012” 类型: M恐怖 导演: 德鲁戈达德 Drew Goddard 主演: 克里斯汀康奈利 Kristen Connolly弗兰克朗茨 Fran Kranz 国家/地区: 美国 片长/分钟: 95分钟 M&#xff5…

Mysql中的sql语句怎么执行的?

1.连接MySQL 通过客户端使用TCP&#xff08;数据传输协议&#xff09;连接MySQL连接器&#xff0c;连接器接到请求后对它进行检验是否有权限&#xff0c;有就进行分配资源。&#xff08;这个过程不能超过8小时&#xff09; 2.成功连接(校验效验) 客户端发送sql语句&#xff…

流网络复习笔记

所以这里的19是118-019 <s , w> 1/3就是容量是3&#xff0c;流量是1 残留网络就是两个相对箭头上都是剩余对应方向还能同行的流量 所以s->w 3-1 2, w->s 1

Redis - 实战之 全局 ID 生成器 RedisIdWorker

概述 定义&#xff1a;一种分布式系统下用来生成全局唯一 ID 的工具 特点 唯一性&#xff0c;满足优惠券需要唯一的 ID 标识用于核销高可用&#xff0c;随时能够生成正确的 ID高性能&#xff0c;生成 ID 的速度很快递增性&#xff0c;生成的 ID 是逐渐变大的&#xff0c;有利于…

arXiv-2024 | VLM-GroNav: 基于物理对齐映射视觉语言模型的户外环境机器人导航

作者&#xff1a; Mohamed Elnoor, Kasun Weerakoon, Gershom Seneviratne, Ruiqi Xian, Tianrui Guan, Mohamed Khalid M Jaffar, Vignesh Rajagopal, and Dinesh Manocha单位&#xff1a;马里兰大学学院公园分校原文链接&#xff1a;VLM-GroNav: Robot Navigation Using Phys…

华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)

华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理&#xff0c;我们需要统一把局域网内的所有AP上线到AC&#xff0c;由AC做集中式管理部署。这里我们需要理解CAPWAP协议&#xff0c;该协议分为两种报文&#xff1a;1、管理报文 2、数据报文。管理报文实际在抓包过程…

简单vue3前端打包部署到服务器,动态配置http请求头后端ip方法教程

vue3若依框架前端打包部署到服务器&#xff0c;需要部署到多个服务器上&#xff0c;每次打包会很麻烦&#xff0c;今天教大家一个动态配置请求头api的方法&#xff0c;部署后能动态获取(修改)对应服务器的请求ip 介绍两种方法&#xff0c;如有需要可以直接尝试步骤一&#xff…

Java-DataX 插件机制示例

示例代码 DataXPluginExample: DataX 项目的plugin 机制学习https://gitee.com/wendgit/data-xplugin-example/ 摘要 DataXPluginExample 是一个我编写的专门解读DataX插件机制的示例项目&#xff0c;旨在深入解析和掌握DataX的插件机制。本示例通过简洁明了的实现方式&#…