一、
头文件
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include "seqlist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 40 //定义顺序表的最大容量
typedef int datatype; //数据元素的类型,以整形为例
//定义顺序表类型
typedef struct
{
datatype data[MAX]; //存储数据元素的数组
int len; //存储当前顺序表的长度
}seqList,*seqListPtr; //重命名为一个结构体变量,和一个指针
//创建顺序表
seqListPtr list_create();
//判满
int list_full(seqListPtr S);
//判空
int list_empty(seqListPtr S);
//向顺序表中添加元素
int list_add(seqListPtr S, datatype e);
//遍历顺序表
void list_show(seqListPtr S);
//任意位置插入元素
int list_insert_pos(seqListPtr S,int pos,datatype e);
//任意位置删除元素
//按位置进行修改
//按值进行修改
//查找指定位置的元素
//按值进行查找元素
int list_search_value(seqListPtr S, datatype e);
//存在返回真
//将顺序表排序,用选择排序
void list_sort(seqListPtr S, int flag);
//flag = 1升序,0降序
//将顺序表去重
//扩容
//求最值操作
datatype list_mvalue(seqListPtr S, int flag);
//flag = 1最大值,0最小值
//顺序表反转(一维数组逆置
void list_reverse(seqListPtr S);
//释放顺序表
#endif
源文件
#include "seqlist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//创建顺序表
seqListPtr list_create()
{
//在堆区申请一个顺序表的空间大小
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_full(seqListPtr S)
{
//判断逻辑
if(NULL == S)
{
printf("所给顺序表不合法\n");
return 0;
}
//合法,则返回是否已经满了
return S->len == MAX; //表达式成立为真,返回1
}
//判空,如果空返回真,非空返回假
int list_empty(seqListPtr S)
{
//判断逻辑
if(NULL == S)
{
printf("所给顺序表不合法\n");
return 0;
}
//合法返回是否空
return S->len == 0;
}
//向顺序表中添加元素
int list_add(seqListPtr 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(seqListPtr S)
{
//判断逻辑
if(NULL==S || list_empty(S))
{
printf("遍历失败\n");
return ;
}
//遍历逻辑
printf("当前顺序表的元素分别是:");
for(int i=0; i<S->len; i++)
{
printf("%d\t",S->data[i]);
}
printf("\n");
}
//任意位置插入元素
int list_insert_pos(seqListPtr S,int pos,datatype e)
{
//判断逻辑
if(NULL==S || list_full(S) || pos<0 || pos>S->len)
{
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");
return 1;
}
//按值进行查找元素
int list_search_value(seqListPtr S, datatype e)
{
for(int i=0; i<S->len; i++)
{
if(S->data[i] == e)
{
printf("已找到该元素\n");
return 1;
}else{
printf("表内没有该元素\n");
return 0;
}
}
return 0;
}
//将顺序表排序,用选择排序
void list_sort(seqListPtr S, int flag)
{
int index = 0;
int temp;
if(flag == 1)
{
for(int i=1; i<S->len; i++)
{
index = i-1;
for(int j=i-1; j<S->len; j++)
{
if(S->data[index]>S->data[j])
{
index = j;
}
}
if(index!=i-1)
{
temp = S->data[index];
S->data[index] = S->data[i-1];
S->data[i-1] = temp;
}
}
}else if(flag == 0)
{
for(int i=1; i<S->len; i++)
{
index = i-1;
for(int j=i-1; j<S->len; j++)
{
if(S->data[index]<S->data[j])
{
index = j;
}
}
if(index!=i-1)
{
temp = S->data[index];
S->data[index] = S->data[i-1];
S->data[i-1] = temp;
}
}
}
}
//求最值操作
datatype list_mvalue(seqListPtr S, int flag)
{
int mva = S->data[0];
if(flag == 1)
{
for(int i=0; i<S->len; i++)
{
if(mva<S->data[i])
{
mva = S->data[i];
}
}
printf("最大值为%d\n",mva);
}else if(flag == 0)
{
for(int i=0; i<S->len; i++)
{
if(mva>S->data[i])
{
mva = S->data[i];
}
}
printf("最小值为%d\n",mva);
}
return 0;
}
测试文件
#include "seqlist.h"
#include <stdio.h>
int main(int argc, const char *argv[])
{
//申请一个顺序表
seqListPtr S = list_create();
if(NULL == S)
{
return -1;
}
//调用添加函数
list_add(S,3);
list_add(S,8);
list_add(S,2);
list_add(S,4);
//调用遍历函数
list_show(S);
//调用插入函数
list_insert_pos(S,1,100);
list_show(S);
//调用查找函数
list_search_value(S,3);
//调用排序函数
list_sort(S,1);
list_show(S);
list_sort(S,0);
list_show(S);
//调用最值函数
list_mvalue(S,1);
list_mvalue(S,0);
return 0;
}
二、思维导图