分文件编译 ,将功能函数封装到一个文件中
功能函数
#include"seqlist.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
seqList* listCreate()
{
seqList *S = (seqList*)malloc(sizeof(seqList));
if(NULL == S)
{
printf("申请空间失败\n");
return NULL;
}
memset(S->data,0,sizeof(S->data));
S->len = 0;
printf("创建成功\n");
return S;
}
//判空
int listEmpty(seqList *S)
{
if(NULL==S)
{
printf("所给顺序标不合法\n");
exit(0);
}
return S->len==0? 1:0;
}
//判满
int listFull(seqList *S)
{
return S->len==MAX ? 1:0;
}
//添加元素
int listAdd(seqList *S,datatype e)
{
if(listFull(S))
{
printf("表满,添加失败\n");
return -1;
}
S->data[S->len]=e;
S->len ++;
printf("添加成功\n");
return 0;
}
//遍历
void listShow(seqList *S)
{
if(listEmpty(S))
{
printf("空空如也,遍历失败\n");
return;
}
printf("目前顺序表中元素分别是:");
for(int i=0; i<S->len; i++)
{
printf("%d\t",S->data[i]);
}
printf("\n");
}
//任意位置插入
int listInsertPos(seqList *S,int pos,datatype e)
{
if(listFull(S))
{
printf("表满,插入失败\n");
return -1;
}
if(pos<0 || pos>S->len)
{
printf("插入位置不合法,插入失败\n");
return -2;
}
for(int i=S->len-1;i>=pos;i--)
{
S->data[i+1]=S->data[i];
}
S->data[pos]=e;
S->len++;
printf("插入成功\n");
listShow(S);
}
//任意位置删除
int listDeletePos(seqList *S,int pos)
{
if(listEmpty(S) || pos<0 || pos>S->len-1)
{
printf("删除失败\n");
return -1;
}
for(int i=pos+1; i<S->len; i++)
{
S->data[i-1]=S->data[i];
}
S->len--;
printf("删除成功\n");
return 0;
}
//按值查找,返回对应的位置
int listSearchValue(seqList *S,datatype e,int *p)
{
*p=0;
if(listEmpty(S))
{
printf("表空,查找失败\n");
(*p)++;
return -1;
}
for(int i=0; i<S->len; i++)
{
if(e==S->data[i])
{
return i;
}
}
printf("查找失败,表中未有该元素\n");
(*p)++;
return -2;
}
//按位置查找,返回对应的值
datatype listSearchPos(seqList *S,int pos,int *p)
{
*p=0;
if(listEmpty(S))
{
printf("表空,查找失败\n");
(*p)++;
return -1;
}
else if(pos<0 || pos>S->len)
{
printf("查找失败,表中未有该下标\n");
(*p)++;
return -2;
}
else
{
return S->data[pos];
}
}
//按值修改
int listUpdateValue(seqList *S,datatype old_e, datatype new_e)
{
int flag=0;
if(listEmpty(S))
{
printf("表空,查找失败\n");
return -1;
}
for(int i=0; i<S->len; i++)
{
if(S->data[i]==old_e)
{
S->data[i]=new_e;
flag++;
}
}
if(flag==0)
{
printf("修改失败,表中未有该元素\n");
return -2;
}else
{
printf("按值修改成功\n");
listShow(S);
return 0;
}
}
//按位置修改
int listUpdatePos(seqList *S,int pos, datatype new_e)
{
//判断逻辑
if(listEmpty(S) || pos<0 || pos>S->len-1)
{
printf("修改失败\n");
return -1;
}
//修改逻辑
S->data[pos]= new_e;
printf("修改成功\n");
listShow(S);
return 0;
}
//冒泡升序排序
void listSortUp(seqList *S)
{
int i,j;
datatype temp;
for(i=1;i<S->len;i++)
{
for(j=0;j<S->len-i;j++)
{
if(S->data[j]>S->data[j+1])
{
temp=S->data[j];
S->data[j]=S->data[j+1];
S->data[j+1]=temp;
}
}
}
printf("升序排序成功\n");
listShow(S);
}
//选择降序排序
void listSortDown(seqList *S)
{
int i,j;
int max;
datatype temp;
for(i=0; i<S->len; i++)
{
max=i;
for(j=i+1; j<S->len; j++)
{
if(S->data[max]<S->data[j])
{
max=j;
}
}
if(max!=i)
{
temp=S->data[max];
S->data[max]=S->data[i];
S->data[i]=temp;
}
}
printf("降序排序成功\n");
listShow(S);
}
//去重
void listDeleteRepeat(seqList *S)
{
if(S->len<=1)
{
printf("去重失败\n");
return;
}
int i,j;
for(i=0; i<S->len; i++)
{
for(j=i+1;j<S->len; j++)
{
if(S->data[i]==S->data[j])
{
listDeletePos(S,j);
j--;
}
}
}
printf("去重成功\n");
listShow(S);
}
//释放表
void listFree(seqList *S)
{
if(NULL!=S)
{
free(S);
}
S=NULL;
printf("释放成功\n");
}
将功能函数头和结构体定义集成至.h文件中
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}seqList;
//申请空间
seqList* listCreate();
//判空
int listEmpty(seqList *S);
//判满
int listFull(seqList *S);
//添加元素
int listAdd(seqList *S,datatype e);
//遍历
void listShow(seqList *S);
//任意位置插入
int listInsertPos(seqList *S,int pos,datatype e);
//任意位置删除
int listDeletePos(seqList *S,int pos);
//按值查找,返回对应的位置
int listSearchValue(seqList *S,datatype e,int *p);
//按位置查找,返回对应的值
datatype listSearchPos(seqList *S,int pos,int *p);
//按值修改
int listUpdateValue(seqList *S,datatype old_e, datatype new_e);
//按位置修改
int listUpdatePos(seqList *S,int pos, datatype new_e);
//冒泡升序排序
void listSortUp(seqList *S);
//选择降序排序
void listSortDown(seqList *S);
//去重
void listDeleteRepeat(seqList *S);
//释放表
void listFree(seqList *S);
#endif
在主文件中引用该.h文件并使用菜单框架实现功能函数的使用
#include<stdio.h>
#include<stdlib.h>
#include"./seqlist.h"
int p=0;
int main(int argc, const char *argv[])
{
int num;
seqList *S= listCreate();
if(NULL==S)
{
return -1;
}
while(1)
{
printf("--------------------------------------------\n");
printf("----------------数据结构练习----------------\n");
printf("1、写入元素\n");
printf("2、任意位置插入\n");
printf("3、任意位置删除\n");
printf("4、按值查找\n");
printf("5、按位置查找\n");
printf("6、按值修改\n");
printf("7、按位置修改\n");
printf("8、冒泡升序排序\n");
printf("9、选择降序排序\n");
printf("10、去重\n");
printf("0、释放表并退出程序\n");
printf("请输入想要实现的功能编号:");
scanf("%d",&num);
switch(num)
{
case 1:
{
int n,temp;
printf("请输入输入元素的个数>>");
scanf("%d",&n);
for(int i=0; i<n; i++)
{
printf("请输入元素>>");
scanf("%d",&temp);
listAdd(S,temp);
}
} break;
case 2:
{
int pos;
datatype e;
printf("请输入想要插入的位置>>");
scanf("%d",&pos);
printf("请输入想要插入的值>>");
scanf("%d",&e);
listInsertPos(S,pos,e);
} break;
case 3:
{
int pos;
printf("请输入想要删除的位置>>");
scanf("%d",&pos);
listDeletePos(S,pos);
} break;
case 4:
{
int find,pos;
printf("请输入想要查找的值>>");
scanf("%d",&find);
pos=listSearchValue(S,find,&p);
if(p==0)
{
printf("查找成功,下标为%d\n",pos);
}
} break;
case 5:
{
int pos;
datatype find;
printf("请输入想要查找的下标>>");
scanf("%d",&pos);
find=listSearchPos(S,pos,&p);
if(p==0)
{
printf("查找成功,对应的值为%d\n",find);
}
} break;
case 6:
{
datatype var,a;
printf("请输入想要修改的原值>>");
scanf("%d",&var);
printf("请输入想要修改后的值>>");
scanf("%d",&a);
listUpdateValue(S,var,a);
}break;
case 7:
{
int pos;
datatype e;
printf("请输入想要修改的位置>>");
scanf("%d",&pos);
printf("请输入想要修改后的值>>");
scanf("%d",&e);
listUpdatePos(S,pos,e);
}break;
case 8:
{
listSortUp(S);
}break;
case 9:
{
listSortDown(S);
}break;
case 10:
{
listDeleteRepeat(S);
}break;
case 0:
{
listFree(S);
S=NULL;
exit(0);
} break;
default : printf("输入的编号有误,请重新输入!\n"); break;
}
}
return 0;
}
部分运行结果
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:1
请输入输入元素的个数>>5
请输入元素>>1
添加成功
请输入元素>>2
添加成功
请输入元素>>3
添加成功
请输入元素>>1
添加成功
请输入元素>>5
添加成功
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:2
请输入想要插入的位置>>3
请输入想要插入的值>>2
插入成功
目前顺序表中元素分别是:1 2 3 2 1 5
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:3
请输入想要删除的位置>>3
删除成功
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:4
请输入想要查找的值>>3
查找成功,下标为2
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:5
请输入想要查找的下标>>3
查找成功,对应的值为1
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:6
请输入想要修改的原值>>3
请输入想要修改后的值>>5
按值修改成功
目前顺序表中元素分别是:1 2 5 1 5
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:7
请输入想要修改的位置>>3
请输入想要修改后的值>>2
修改成功
目前顺序表中元素分别是:1 2 5 2 5
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:8
升序排序成功
目前顺序表中元素分别是:1 2 2 5 5
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:9
降序排序成功
目前顺序表中元素分别是:5 5 2 2 1
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:10
删除成功
删除成功
去重成功
目前顺序表中元素分别是:5 2 1
--------------------------------------------
----------------数据结构练习----------------
1、写入元素
2、任意位置插入
3、任意位置删除
4、按值查找
5、按位置查找
6、按值修改
7、按位置修改
8、冒泡升序排序
9、选择降序排序
10、去重
0、释放表并退出程序
请输入想要实现的功能编号:0
释放成功