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

news/2024/12/14 9:01:48/

主函数: 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.ppmy.cn/news/1554975.html

相关文章

VS2022 ASP.NET core Web API 示例代码解释

0. 项目结构 在创建ASP.NET Core Web API项目后&#xff0c;项目的基本结构如下&#xff1a; MyWebApiProject │ Controllers │ └── WeatherForecastController.cs │ Program.cs │ WeatherForecast.cs │ appsettings.json │ ...1. Program.cs 这个文件…

uni-app开发App注意事项

技术选择 分包目前不支持Vue3 个人选择考虑&#xff1a; 1、vue2由于官方不维护了&#xff0c;所以uniapp也不维护了。 2、vue3使用proxy&#xff0c;不支持ios9。 3、目前插件市场中 vue2开发的插件占比更大。 4、如果app页面较多&#xff0c;需要开启分包&#xff0c;但…

Ubuntu中iptables默认是开启的吗

不&#xff0c;Ubuntu 中 iptables 默认不是开启的。 虽然 Ubuntu 系统默认安装了 iptables 软件包&#xff08;你可以通过 dpkg -l iptables 或 which iptables 命令来验证&#xff09;&#xff0c;但这并不意味着 iptables 规则已经生效。实际上&#xff0c;iptables 的规则…

Windows通过指令查看已安装的驱动

Windows通过指令查看已安装的驱动 在 Windows 操作系统中&#xff0c;有几种命令可以用来查看已安装的驱动程序。以下是常见的几种方法&#xff1a; 1. 使用 pnputil 查看已安装驱动程序 pnputil 是一个 Windows 内置工具&#xff0c;可以列出所有已安装的驱动程序包。 命令…

【Linux】Systemtap在CentsOS9上测试成功了

在Ubuntu上测试没有成功&#xff0c;先看看运行成功的效果吧&#xff1a; 看到运行的效果&#xff0c;可以安心些&#xff0c;哈哈 指导操作来源于这里&#xff1a;SystemTap 主要来源于这里&#xff1a; https://sourceware.org/systemtap/SystemTap_Beginners_Guide/using-s…

计算机网络技术基础:1.计算机网络的产生与发展

从1946年世界上第一台计算机ENIAC的诞生&#xff0c;计算机网络的发展大体可分为以下4个阶段。 一、第一代计算机网络——面向终端的计算机网络 第一代计算机网络也称面向终端的计算机网络&#xff0c;它是以主机为中心的通信系统。这样的系统中&#xff0c;除一台中心计算机&…

OceanBase4.0 跟我学--分布式到底可靠不可靠,到底丢不丢数 ---- 什么是PALF

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;&#xff08;共2610人左右 1 …

如何利用Java爬虫获取商品销量详情

在当今数据驱动的时代&#xff0c;获取商品的销量数据对于市场分析、竞争对手研究以及制定营销策略至关重要。Java爬虫技术为我们提供了一种自动化获取网络数据的有效手段。本文将详细介绍如何利用Java爬虫获取商品销量详情&#xff0c;并提供一个完整的代码示例。 一、Java爬…