#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#define MAX 40
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int datatype;
//定义顺序表类型
typedef struct
{
datatype data[MAX];
int len;
}seqlist,*seqlist_ptr;
//创建顺序表
seqlist_ptr list_create();
//判空
int list_empty(seqlist_ptr S);
//判满
int list_full(seqlist_ptr S);
//想顺序表中添加元素
int add(seqlist_ptr S,datatype e);
//遍历顺序表
void list_show(seqlist_ptr S);
//任意位置插入元素
int list_insert(seqlist_ptr S,int pos,datatype e);
//任意位置删除元素
//按位置进行修改
//按值进行修改
//查找指定位置的元素
//按值进行查找元素
int list_search_value(seqlist_ptr S, datatype e);
//将顺序表排序
void list_sort(seqlist_ptr S, int flag);
//将顺序表去重
//扩容
//求最值操作
datatype list_mvalue(seqlist_ptr S, int flag);
//顺序表反转
void list_reverse(seqlist_ptr S);
//释放顺序表
#endif
seqlist.c
#include "seqlist.h"
//创建顺序表
seqlist_ptr list_create()
{
//堆区申请一个顺序表的空间大小
seqlist_ptr S=(seqlist_ptr)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_full(seqlist_ptr S)
{
//判断逻辑
if(NULL==S)
{
printf("顺序表不合法\n");
return 0;
}
//合法
return S->len==MAX;
}
//判空
int list_empty(seqlist_ptr S)
{
//判断逻辑
if(NULL==S)
{
printf("顺序表不合法\n");
return 0;
}
//合法
return S->len==0;
}
//添加元素
int add(seqlist_ptr S,datatype e)
{
if(NULL==S||list_full(S))
{
printf("失败\n");
return 0;
}
S->data[S->len]=e;
S->len++;
printf("添加元素成功\n");
return 1;
}
//遍历顺序表
void list_show(seqlist_ptr S)
{
if(NULL==S||list_empty(S))
{
printf("遍历失败\n");
return ;
}
//遍历逻辑
printf("当前表格顺序元素分别是\n");
for(int i=0;i<S->len;i++)
{
printf("%d\t",S->data[i]);
}
putchar(10);
}
//任意位置插入元素
int list_insert(seqlist_ptr S,int pos,datatype e)
{
//判断逻辑
if(NULL==S||pos>S->len||pos<0)
{
printf("插入失败\n");
return 0;
}
//腾空过程
for(int i=S->len-1;i>=pos;i--)
{
S->data[i+1]=S->data[i];
}
//插入逻辑
S->data[pos]=e;
//表的变化
S->len++;
printf("插入成功\n");
}
//按值进行查找元素
int list_search_value(seqlist_ptr S, datatype e)
{
if(NULL==S||list_empty(S))
{
printf("查询失败\n");
return 0;
}
for(int i=0;i<S->len;i++)
{
if(S->data[i]==e)
{
printf("查找到%d是表中的第%d个元素\n",e,S->len-1);
}
}
}
//顺序表排序
void list_sort(seqlist_ptr S, int flag)
{
if(NULL==S||list_empty(S))
{
printf("排序失败\n");
}
int i,j;
datatype temp;
// printf("升序排序--1\n降序排序--2\n");
// scanf("%d",&flag);
for(i=1;i<S->len;i++)
{
for(j=0;j<S->len-i;j++)
{
if(flag==1 && S->data[j]<S->data[j+1])
{
temp=S->data[j];
S->data[j]=S->data[j+1];
S->data[j+1]=temp;
}
else if(flag==0 && S->data[j]<S->data[j+1])
{
temp=S->data[j];
S->data[j]=S->data[j+1];
S->data[j+1]=temp;
}
}
}
if(flag==1)
{
printf("降序排序后的顺序为\n");
}
if(flag==0)
{
printf("升序排序后的顺序为\n");
}
for(i=0;i<S->len;i++)
{
printf("%d ",S->data[i]);
}
putchar(10);
}
//求最值操作
datatype list_mvalue(seqlist_ptr S, int flag)
{
if(NULL==S||list_empty(S))
{
printf("求值失败\n");
}
datatype mvalue=S->data[0];
for(int i=0;i<S->data[S->len];i++)
{
if(flag==0 && mvalue>S->data[i])
{
datatype temp=mvalue;
mvalue=S->data[i];
S->data[i]=temp;
}
else if(flag==1 && mvalue<S->data[i])
{
datatype temp=mvalue;
mvalue=S->data[i];
S->data[i]=temp;
}
}
if(flag==0)
{
printf("找到最小值为%d\n",mvalue);
}
if(flag==1)
{
printf("找到最大值为%d\n",mvalue);
}
return 0;
}
//顺序表反转
void list_reverse(seqlist_ptr S)
{
if(NULL==S||list_empty(S))
{
printf("求值失败\n");
}
datatype temp=0;
int i;
for(i=0;i<(S->len)/2;i++);
{
temp=S->data[i];
S->data[i]=S->data[S->len-i-1];
S->data[S->len-i-1]=temp;
}
printf("反转后的顺序表为\n");
for(int i=0;i<S->len;i++)
{
printf("%d ",S->data[i]);
}
putchar(10);
}
main.c
#include "seqlist.h"
int main(int argc, const char *argv[])
{
//申请顺序表
seqlist_ptr S=list_create();
if(NULL==S)
{
return -1;
}
//调用添加函数
add(S,1);
add(S,2);
add(S,3);
add(S,4);
//调用遍历
list_show(S);
//任意位置插入元素
list_insert(S,2,5);
//调用遍历
list_show(S);
//调用按值查询元素;
list_search_value(S,3);
//调用顺序表排序升序0降序1;
list_sort(S,1);
//调用求最值函数最小值0最大值为1;
list_mvalue(S,1);
//调用顺序表反转函数
list_reverse(S);
return 0;
}
结果