按值进行查找元素,将顺序表排序,选择排序0将1升,求最值操作0min 1max,顺序表反转
头文件:
#ifndef _sxb_h_
#define _sxb_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_empty(seqListPtr S);//判空
int list_full(seqListPtr S);//判满
int list_add(seqListPtr S,datatype e);//向顺序表中添加元素
void list_show(seqListPtr S);//遍历顺序表
int list_insert_pos(seqListPtr S,datatype e,int pos);//任意位置插入元素
/*任意位置删除元素
按位置进行修改
按值进行修改
查找指定位置的元素*/
int list_search_value(seqListPtr S,datatype e);//按值进行查找元素
void list_sort(seqListPtr S,int flag);//将顺序表排序,选择排序0将1升
/*顺序表去重
扩充*/
datatype list_mvalue(seqListPtr S,int flag);//求最值操作0min 1max
void list_reverse(seqListPtr S);//顺序表反转
/*释放顺序表*/
#endif
功能文件:
#include"sxb.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_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_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,datatype e,int pos)//任意位置插入元素
{
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||list_empty(S))
{
printf("查找失败\n");
return 0;
}
int k=0;
for(int i=0;i<S->len;i++){
if(e==S->data[i])
{
printf("查找成功\n");
printf("为第%d个元素\n",i+1);
k++;
}
}
if(0==k)
{
printf("无该元素\n");
}
}
void list_sort(seqListPtr S,int flag)//将顺序表排序,选择排序0将1升
{
if(NULL==S||list_empty(S))
{
printf("查找失败\n");
return;
}
int i=0,j=0,k=0,t=0;
if(0==flag)
{
for(i=1;i<S->len;i++)
{
k=i-1;
for(j=i-1;j<S->len;j++)
{
if(S->data[k]<S->data[j])
{
k=j;
}
}
if(k!=i-1)
{
t=S->data[k];
S->data[k]=S->data[i-1];
S->data[i-1]=t;
}
}
printf("降序完成\n");
}
if(1==flag)
{
for(i=1;i<S->len;i++)
{
k=i-1;
for(j=i-1;j<S->len;j++)
{
if(S->data[k]>S->data[j])
{
k=j;
}
}
if(k!=i-1)
{
t=S->data[k];
S->data[k]=S->data[i-1];
S->data[i-1]=t;
}
}
printf("升序完成\n");
}
}
datatype list_mvalue(seqListPtr S,int flag)//求最值操作0min 1max
{
if(NULL==S||list_empty(S))
{
printf("求值失败\n");
return 0;
}
int i=0;
datatype min=S->data[0];
datatype max=S->data[0];
if(0==flag)
{
for(i=1;i<S->len;i++)
{
if(min>S->data[i])
{
min=S->data[i];
}
}
return min;
}
if(1==flag)
{
for(i=1;i<S->len;i++)
{
if(max<S->data[i])
{
max=S->data[i];
}
}
return max;
}
}
void list_reverse(seqListPtr S)//顺序表反转
{
if(NULL==S||list_empty(S))
{
printf("反转失败\n");
return;
}
datatype a=0,t=0;
a=S->len-1;
for(int i=0;i<a;i++,a--)
{
t=S->data[i];
S->data[i]=S->data[a];
S->data[a]=t;
}
printf("反转成功\n");
}
主函数(测试文件)
#include "sxb.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,100,1);
list_show(S);
int a=0;
printf("请输入要查找的值:");
scanf("%d",&a);
list_search_value(S,a);
list_sort(S,0);
list_show(S);
list_sort(S,1);
list_show(S);
printf("max=%d\n",list_mvalue(S,1));
printf("min=%d\n",list_mvalue(S,0));
list_reverse(S);
list_show(S);
return 0;
}
思维导图: