分文件编译 ,将功能函数封装到一个文件中
功能函数
#include"seqlist.h" #include#include #include 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 len; i++) { printf("%dt",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 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 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 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 len;i++) { for(j=0;j 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 len; i++) { max=i; for(j=i+1; j len; j++) { if(S->data[max] 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 len; i++) { for(j=i+1;j 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#include #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 >"); 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("查找成功,下标为%dn",pos); } } break; case 5: { int pos; datatype find; printf("请输入想要查找的下标>>"); scanf("%d",&pos); find=listSearchPos(S,pos,&p); if(p==0) { printf("查找成功,对应的值为%dn",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 释放成功



