头文件
#ifndef _SEQLIST_H_
#define _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 pose,datatype e);
//按值进行查找元素
int list_search_value(seqListPtr S,datatype e);
//将顺序表进行排序,选择排序
void list_sort(seqListPtr S,int flag);
//求最值操作
datatype list_mvalue(seqListPtr S,int flag);
//顺序表反转
void list_reverse(seqListPtr S);
源文件
#include"seqlist.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;
}
//判空
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)
{
//判断逻辑
if(NULL==S)
{
printf("查找失败\n");
return 0;
}
//开始进行查找
int n=0; //设置一个标志
for(int i=0;i<S->len;i++)
{
if(S->data[i]==e)
{
n=1; //说明查找到了
printf("%d\n",S->data[i]);
return n;
}
}
//判断是否没找到
if(n==0)
{
return n;
}
}
//将顺序表进项排序,选择排序
void list_sort(seqListPtr S,int flag)
{
//判断逻辑
if(NULL==S)
{
printf("排序失败\n");
return ;
}
//开始排序,并判断是升序还是降序
if(flag==0)
{
printf("降序\n");
for(int i=1;i<S->len;i++)
{
int m=i-1;
for(int j=i-1;j<S->len;j++)
{
if(S->data[m]<S->data[j])
{
m=j;
}
}
if(m!=i-1)
{
int n=S->data[m];
S->data[m]=S->data[i-1];
S->data[i-1]=n;
}
}
}
else if(flag==1)
{
printf("升序\n");
for(int i=1;i<S->len;i++)
{
int m=i-1;
for(int j=i-1;j<S->len;j++)
{
if(S->data[m]>S->data[j])
{
m=j;
}
}
if(m!=i-1)
{
int n=S->data[m];
S->data[m]=S->data[i-1];
S->data[i-1]=n;
}
}
}
}
//顺序表反转
void list_reverse(seqListPtr S)
{
//判断逻辑
if(NULL==S)
{
printf("反转失败\n");
return ;
}
//开始进行反转
printf("开始反转\n");
for(int i=0,j=S->len-1;i<j;i++,j--)
{
int m=S->data[i];
S->data[i]=S->data[j];
S->data[j]=m;
}
}
//求最值操作
datatype list_mvalue(seqListPtr S,int flag)
{
//判断逻辑
if(NULL==S)
{
printf("顺序表不合法\n");
return 0;
}
//开始求最值
if(flag==0)
{
printf("最小值为: \n");
int m=0;
for(int i=0;i<S->len;i++)
{
if(S->data[m]>S->data[i])
{
m=i;
}
}
if(m!=0)
{
int n=S->data[m];
S->data[m]=S->data[0];
S->data[0]=n;
}
return S->data[0];
}
if(flag==1)
{
printf("最大值为: \n");
int m=0;
for(int i=0;i<S->len;i++)
{
if(S->data[m]<S->data[i])
{
m=i;
}
}
if(m!=0)
{
int n=S->data[m];
S->data[m]=S->data[0];
S->data[0]=n;
}
return S->data[0];
}
}
测试文件
#include"seqlist.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);
//调用查找函数
datatype m=0;
scanf("%d",&m);
int ret = list_search_value(S,m);
if(ret==1)
{
printf("查找成功\n");
}
else if(ret==0)
{
printf("不在该顺序表中\n");
}
int n=0;
scanf("%d",&n);
//调用排序函数
list_sort(S,n);
//调用遍历函数
list_show(S);
printf("反转前排序\n");
//调用遍历函数
list_show(S);
//调用反转函数
list_reverse(S);
//调用遍历函数
list_show(S);
//调用求最值函数
int a=0;
scanf("%d",&a);
int mx=list_mvalue(S,a);
printf("%d\n",mx);
return 0;
}
面试题
思维导图