#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include <stdio.h>
#include <string.h>
#include <stdlib.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);//顺序表去重//扩容//求最值操作
void datatype_list_mvalue(seqlistPtr S, int flag);
//顺序表反转
void list_reverse(seqlistPtr S);
//释放顺序表#endif
#ifndef __SEQLIST_H__
#define __SEQLIST_H__#include <stdio.h>
#include <string.h>
#include <stdlib.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);//顺序表去重//扩容//求最值操作
void datatype_list_mvalue(seqlistPtr S, int flag);
//顺序表反转
void list_reverse(seqlistPtr S);
//释放顺序表#endif
ubuntu@ubuntu:0803$ cat seqlist.c
#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 == MAX;
}
//向顺序表中添加元素
int list_add(seqlistPtr S,datatype e)
{if(NULL==S || list_full(S)){printf("添加失败\n");return -1;}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 || list_empty(S)){printf("查找失败,顺序表为空");return -1;}for(int i=0 ; i<S->len ; i++){if(e==S->data[i]){return i;}}
}
void list_sort(seqlistPtr S, int flag)
{if(NULL==S || list_empty(S)){printf("排序失败,顺序表为空");return;}for(int i=0 ; i<S->len-1 ; i++){int min=i;for(int j=i+1 ; j<S->len ; j++){if(S->data[min] > S->data[j]){min=j;}}if(min!=i){S->data[i]^=S->data[min];S->data[min]^=S->data[i];S->data[i]^=S->data[min];}}printf("顺序表排序:");for(int i=0 ; i<S->len ; i++){printf("%d\t",S->data[i]);}putchar(10);
}
void datatype_list_mvalue(seqlistPtr S, int flag)
{if(NULL==S || list_empty(S)){printf("顺序表为空");return;}int max=S->data[0];int min=S->data[0];for(int i=0 ; i<S->len ; i++){if(max < S->data[i]){max=S->data[i];}else if(min > S->data[i]){min=S->data[i];}}printf("max=%d\nmin=%d\n",max,min);
}
void list_reverse(seqlistPtr S)
{if(NULL==S || list_empty(S)){printf("顺序表为空");return;}for(int i=0 ; i<S->len/2 ;i++){datatype temp=S->data[i];S->data[i]=S->data[S->len-1-i];S->data[S->len-1-i]=temp;}printf("顺序表反转");for(int i=0 ; i<S->len ; i++){printf("%d\t",S->data[i]);}putchar(10);
}
#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,5);list_add(S,4);list_show(S);list_insert_pos(S, 4, 100);list_show(S);printf("元素的位置为:");printf("%d\n",list_search_value(S, 5));list_sort(S,1);datatype_list_mvalue(S,1);list_reverse(S);return 0;
}