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

主函数: 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;

}

运行截图:

相关推荐
墨楠。37 分钟前
数据结构学习记录-树和二叉树
数据结构·学习·算法
小唐C++43 分钟前
C++小病毒-1.0勒索
开发语言·c++·vscode·python·算法·c#·编辑器
醇醛酸醚酮酯1 小时前
Leetcode热题——移动零
算法·leetcode·职场和发展
沉默的煎蛋1 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
Aqua Cheng.1 小时前
MarsCode青训营打卡Day10(2025年1月23日)|稀土掘金-147.寻找独一无二的糖葫芦串、119.游戏队友搜索
java·数据结构·算法
夏末秋也凉1 小时前
力扣-数组-704 二分查找
算法·leetcode
玛丽亚后1 小时前
动态规划(路径问题)
算法·动态规划
qy发大财1 小时前
平衡二叉树(力扣110)
数据结构·算法·leetcode·职场和发展
AI技术控1 小时前
计算机视觉算法实战——无人机检测
算法·计算机视觉·无人机
siy23332 小时前
【c语言日寄】Vs调试——新手向
c语言·开发语言·学习·算法