顺序表创建、判空、判满、增加元素、遍历、插入元素、删除元素、按位置修改、查找、按值修改、查找、排序、求最值、去重、销毁
seqlist.h文件
#ifndef __SEQLIST_H_
#define __SEQLIST_H_
#define MAX 20 //数组的最大容量
typedef int datatype;//类型重定义
typedef struct{
datatype data[MAX];//存储顺序表数组长度
int len;//顺序表长度
}seqlist;
//函数的声明
//创建顺序表
seqlist *list_create();
//判空
int list_empty(seqlist *L);
//判满
int list_full(seqlist *L);
//添加元素
int list_add(seqlist *L,datatype e);
//遍历
int list_show(seqlist *L);
//插入元素
int list_insert_pos(seqlist *L,int pos,datatype e);
//删除元素
int list_delete_pos(seqlist *L,int pos);
//按位置修改
int list_updata_pos(seqlist *L,int pos,datatype new_e);
//按值查找
int list_search_value(seqlist *L,datatype e);
//按位置查找
int list_search_locate(seqlist *L,int pos);
//按值修改
int list_updata_value(seqlist *L,datatype e,datatype new_e);
//排序
int list_sort(seqlist *L);
//求最值
int list_MAX(seqlist *L);
int list_MIN(seqlist *L);
//去重
int list_nmore(seqlist *L);
//销毁
void list_free(seqlist *L);
#endif
seqlish.c文件
#include "seqlist.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//函数的定义
seqlist *list_create()
{
seqlist *L=(seqlist*)malloc(sizeof(seqlist));
if(NULL==L)
{
printf("创建失败\n");
return NULL;
}
L->len=0;
memset(L, 0 , sizeof(datatype)*MAX);
printf("创建成功\n");
return L;
}
//判空
int list_empty(seqlist *L)
{
return L->len==0 ?1:0; //1空 0非空
}
//判满
int list_full(seqlist *L)
{
return L->len==MAX?1:0;//1满 0未满
}
//添加元素
int list_add(seqlist *L,datatype e)
{
//判断逻辑
if(list_full(L))
{
printf("表满,不许加了\n");
return 0;
}
//添加逻辑
L->data[L->len]=e;//要添加的元素放入\
顺序表的第一个没有存放元素的数组元素中
//判断表长度
L->len++;
printf("添加成功\n");
return 1;
}
//遍历
int list_show(seqlist *L)
{
//判断逻辑
if(NULL==L||list_empty(L))
{
printf("啥也没有\n");
return 0;
}
//遍历逻辑
printf("顺序表元素为:>>>\n");
for(int i=0;i<=L->len-1;i++)
{
printf("%d\t",L->data[i]);
}
printf("\n");
}
//插入元素
int list_insert_pos(seqlist *L,int pos,datatype e)
{
//判断逻辑
if(list_full(L)||pos<0||pos>L->len)
{
printf("插入失败啦\n");
return 0;
}
//腾空过程
for(int i=L->len-1;i>=pos;i--)
{
L->data[i+1]=L->data[i];
}
//插入元素
L->data[pos]=e;
//表长变化
L->len++;
printf("插入成功啦\n");
return 0;
}
//删除元素
int list_delete_pos(seqlist *L,int pos)
{
if(list_empty(L)||pos<0||pos>=L->len)
{
printf("删除失败\n");
return 0;
}
//移动元素
for(int i=pos+1;i<L->len;i++)
{
L->data[i-1]=L->data[i];
}
L->len--;
return 1;
}
//按位置修改
int list_updata_pos(seqlist *L,int pos,datatype new_e)
{
//判断逻辑
if(list_empty(L)||pos<0||pos>=L->len)
{
printf("修改失败\n");
return 0;
}
//更新
L->data[pos]=new_e;
printf("更新成功\n");
return 1;
}
//按值查找
int list_search_value(seqlist *L,datatype e)
{
//判断逻辑
if(list_empty(L))
{
// printf("查找失败\n");
return -2;
}
//查找逻辑
for(int i=0;i<L->len;i++)
{
if(L->data[i]==e)
{
return i;//查找成功
}
}
return -1;//查找失败返回-1
}
//按位置查找
int list_search_locate(seqlist *L,int pos)
{
if(list_empty(L)||pos<0||pos>=L->len)
{
printf("查找失败\n");
return -1;
}
int a=L->data[pos];
return a;//返回位置值
}
//按值修改
int list_updata_value(seqlist *L,datatype e,datatype new_e)
{
int pos=list_search_value(L,e);
if(pos>=0)
{
L->data[pos]=new_e;
return 1;
}
}
//排序
int list_sort(seqlist *L)
{
if(list_empty(L))
{
printf("没有元素,停止排序\n");
return -1;
}
for(int i=0;i<L->len-1;i++)
{
if(L->data[i]<L->data[i+1])
{
int temp=L->data[i+1];
L->data[i+1]=L->data[i];
L->data[i]=temp;
}
}
return 1;
}
//求最值
int list_MAX(seqlist *L)
{
if(list_empty(L))
{
printf("没有元素,求不了最值\n");
return -1;
}
list_sort(L);
int max=L->data[0];
return max;
}
int list_MIN(seqlist *L)
{
if(list_empty(L))
{
printf("没有元素,求不了最值\n");
return -1;
}
list_sort(L);
int min=L->data[L->len-1];
return min;
}
//去重
int list_nmore(seqlist *L)
{
if(list_empty(L))
{
printf("去重错误\n");
return -1;
}
for(int i=0;i<L->len-1;i++)
{
for(int j=i+1;j<L->len;j++)
{
if(L->data[i]==L->data[j])
{
for(int k=j;k<L->len;k++)
L->data[k]=L->data[k+1];
L->len--;
}
}
}
return 1;
}
//销毁
void list_free(seqlist *L)
{
if(L!=NULL)
{
free(L);
L=NULL;
printf("销毁成功");
}
}
main.c主函数调用文件
#include <stdio.h>
#include "seqlist.h"
int main(int argc, const char *argv[])
{
seqlist *L=list_create();
if(NULL==L)
{
return -1;
}
list_add(L,3);
list_add(L,8);
list_add(L,2);
list_add(L,4);
//遍历函数
list_show(L);
//调用插入函数
list_insert_pos(L,2,5);
printf("插入后顺序表为>>>\n");
list_show(L);
list_delete_pos(L,2);
printf("删除后顺序表为>>>\n");
list_show(L);
list_updata_pos(L,1,5);
list_show(L);
//测试按值查找
int pos=list_search_value(L,2);
if(pos>=0)
{
printf("您要查找的值位置在%d\n",pos+1);
}
else
printf("查找失败\n");
//测试按值修改
list_updata_value(L,3,9);
printf("按值修改后的\n");
list_show(L);
//测试按位置查找
int a=list_search_locate(L,1);
printf("按位置查找的元素为%d\n",a);
//排序测试
list_sort(L);
printf("排序后");
list_show(L);
//测试最大值
printf("最大值为%d\n",list_MAX(L));
//测试最小值
printf("最小值为%d\n",list_MIN(L));
//测试去重
list_add(L,5);
list_show(L);
list_nmore(L);
printf("去重后");
list_show(L);
//测试销毁
list_free(L);
L=NULL;
list_show(L);
return 0;
}
实现结果如下
创建成功
添加成功
添加成功
添加成功
添加成功
顺序表元素为:>>>
3 8 2 4
插入成功啦
插入后顺序表为>>>
顺序表元素为:>>>
3 8 5 2 4
删除后顺序表为>>>
顺序表元素为:>>>
3 8 2 4
更新成功
顺序表元素为:>>>
3 5 2 4
您要查找的值位置在3
按值修改后的
顺序表元素为:>>>
9 5 2 4
按位置查找的元素为5
排序后顺序表元素为:>>>
9 5 4 2
最大值为9
最小值为2
添加成功
顺序表元素为:>>>
9 5 4 2 5
去重后顺序表元素为:>>>
9 5 4 2
销毁成功啥也没有