1.主函数
#include "seqlist.h"
int main(int argc, const char *argv[])
{
//申请一个顺序表
seqlistPtr S = list_creat();
if(NULL==S)
{
return -1;
}
//调用添加函数
list_input(S,1);
list_input(S,2);
list_input(S,3);
list_input(S,4);
//调用遍历函数
list_show(S);
//调用插入函数
list_char(S,2,5);
//再遍历一遍,看现象
list_show(S);
//调用任意位置删除函数
list_delete(S,4);
//再遍历一遍,看现象
list_show(S);
//调用按位置进行修改函数
list_change(S,1,9);
//再遍历一遍,看现象
list_show(S);
//调用按值进行查找函数
list_search_value(S,5);
//调用排序函数
list_sort(S);
//再遍历一遍,看现象
list_show(S);
//调用最值函数
list_mvalue(S);
//调用逆置函数
list_reverse(S);
//再遍历一遍
list_show(S);
return 0;
}
2.源文件
#include "seqlist.h"
//创建顺序表
seqlistPtr list_creat()
{
seqlistPtr S=(seqlistPtr)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 list_empty(seqlistPtr S)
{
if(NULL==S)
{
printf("顺序表不合法!\n");
return 0;
}
//合法,判断是否空
return S->len == 0;
}
//判满
int list_full(seqlistPtr S)
{
if(NULL==S)
{
printf("顺序表不合法!\n");
return 0;
}
//合法,判断是否满了
return S->len == max;
}
//向顺序表中添加元素
int list_input(seqlistPtr S, datatype a)
{
if(NULL==S || list_full(S))
{
printf("不可以添加!\n");
return 0;
}
S->data[S->len] = a;
S->len++;
printf("添加成功\n");
return 1;
}
//遍历顺序表
void list_show(seqlistPtr S)
{
if(NULL==S || list_empty(S))
{
printf("遍历失败\n");
}
printf("当前顺序表元素顺序为:");
for(int i=0;ilen;i++)
{
printf("%d\t",S->data[i]);
}
printf("\n");
}
//任意位置插入元素
int list_char(seqlistPtr S, int a,datatype b)
{
if(NULL==S || a>S->len || a<0)
{
printf("插入不合理\n");
return 0;
}
for(int i=S->len-1;i>=a;i--)
{
S->data[i+1]=S->data[i];
}
S->data[a]=b;
S->len++;
printf("插入成功\n");
return 1;
}
//任意位置删除元素
int list_delete(seqlistPtr S,int a)
{
if(NULL == S || a>S->len || a<0)
{
printf("删除不合理\n");
return 0;
}
for(int i=a;ilen;i++)
{
S->data[i-1]=S->data[i];
}
S->data[S->len-1]=0;
S->len--;
printf("删除成功\n");
return 1;
}
//按位置进行修改
int list_change(seqlistPtr S,int a,datatype b)
{
if(NULL == S || a<0 || a>S->len )
{
printf("修改不合理\n");
return 0;
}
S->data[a]=b;
printf("修改成功\n");
return 1;
}
//按值进行查找元素
int list_search_value(seqlistPtr S,datatype a)
{
int fleg=0;
int i,j;
if(NULL == S || list_empty(S) )
{
printf("查找不合理\n");
return 0;
}
for(i=0;ilen;i++)
{
if(S->data[i] == a)
{
fleg=1;
j=i;
}
}
if(fleg=1)
{
printf("%d\n",S->data[j]);
}
else
{
printf("没有这个数\n");
}
printf("查找成功\n");
return 1;
}
//将顺序表排序,选择排序
void list_sort(seqlistPtr S)
{
if(NULL == S || list_empty(S) )
{
printf("排序操作不合理\n");
}
int fleg;
printf("请输入0或1确定升序还是降序:");
scanf("%d",&fleg);
int i,j;
datatype temp;
if(fleg==0)
{
for(i=1;ilen;i++)
{
int ret=i-1;
for(j=i-1;jlen;j++)
{
if(S->data[ret]>S->data[j])
{
ret=j;
}
}
if(ret != i-1)
{
temp=S->data[ret];
S->data[ret]=S->data[i-1];
S->data[i-1]=temp;
}
}
}
if(fleg==1)
{
for(i=1;ilen;i++)
{
int ret=i-1;
for(j=i-1;jlen;j++)
{
if(S->data[ret]data[j])
{
ret=j;
}
}
if(ret != i-1)
{
temp=S->data[ret];
S->data[ret]=S->data[i-1];
S->data[i-1]=temp;
}
}
}
}
//求最值操作
datatype list_mvalue(seqlistPtr S)
{
if(NULL == S || list_empty(S))
{
printf("操作不合理\n");
}
int fleg;
printf("请输入0或1确定最大值还是最小值:");
scanf("%d",&fleg);
int i;
datatype temp;
datatype mvalue=S->data[0];
if(fleg==0)
{
for(i=1;ilen;i++)
{
if(mvaluedata[i])
{
temp=mvalue;
mvalue=S->data[i];
S->data[i]=temp;
}
}
}
if(fleg==1)
{
for(i=1;ilen;i++)
{
if(mvalue>S->data[i])
{
temp=mvalue;
mvalue=S->data[i];
S->data[i]=temp;
}
}
}
printf("%d\n",mvalue);
return mvalue;
}
//顺序表反转
void list_reverse(seqlistPtr S)
{
if(NULL == S || list_empty(S))
{
printf("操作不合理\n");
}
int i;
datatype temp;
for(i=0;ilen/2;i++)
{
temp=S->data[i];
S->data[i]=S->data[S->len-i-1];
S->data[S->len-i-1]=temp;
}
}
3.头文件
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include
#include
#include
#include
#define max 10
//类型重命名
typedef int datatype;
//申请一个结构体
typedef struct
{
datatype data[max];
int len;
}seqlist,*seqlistPtr;
//创建顺序表
seqlistPtr list_creat();
//判空
int list_empty(seqlistPtr S);
//判满
int list_full(seqlistPtr S);
//向顺序表中添加元素
int list_input(seqlistPtr S, datatype a);
//遍历顺序表
void list_show(seqlistPtr S);
//任意位置插入元素
int list_char(seqlistPtr S, int a,datatype b);
//任意位置删除元素
int list_delete(seqlistPtr S,int a);
//按位置进行修改
int list_change(seqlistPtr S,int a ,datatype b);
//按值进行修改
//查找指定位置的元素
//按值进行查找元素
int list_search_value(seqlistPtr S,datatype a);
//将顺序表排序,选择排序
void list_sort(seqlistPtr S);
//求最值操作
datatype list_mvalue(seqlistPtr S);
//顺序表反转
void list_reverse(seqlistPtr S);
#endif
4.思维导图