主函数: 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;
}
运行截图: