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