二、写出有关顺序表的所有操作
seqlist.h
#ifdef SEQLIST_H
#define SEQLIST_H
#define MAX 20
#include <stdio.h>
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}Seqlist,*SeqListPtr;
//声明顺序表创建函数
SqeListPtr list_creat();
//判空函数
int list_empty(SeqListPtr L);
//判满函数
int list_full(SeqListPtr L);
//添加元素
int list_add(SeqListPtr L, datatype e);
//遍历顺序表
void list_show(SeqListPtr L);
//定义任意位置插入函数
int list_insert_pos(SeqListPtr L, int pos, datatype e);
//定义任意位置删除函数
int list_delete_pos(SeqListPtr L, int pos);
//定义按值查找位置函数
int list_search_value(SeqListPtr L, datatype e);
//按位置进行修改
int list_update_pos(SeqListPtr L, int pos, datatype e);
//按值进行修改
int list_update_value(SeqListPtr L, datatype old_e, datatype new_e);
#endif
seqlist.c
#include "seqlist.h"
#include <stdio.h>
typedef int datatype;
#define MAX 20
typedef struct
{
datatype data[MAX];
int len;
}SeqList,*SeqListPtr;
//在堆区申请一个空间
SeqListPtr list_creat()
{
SeqListPtr L=(SeqListPtr)malloc(sizeof(SeqList));
if(L == NULL)
{
printf("创建失败\n");
return NULL;
}
memset(L->data,0,sizeof(L->data)); //数组初始化
L->len =0; //顺序表长度为0
printf("创建成功\n");
return L;
}
//判空函数,空返回真,非空返回假
int list_empty(SeqListPtr L)
{
return L->len==0;
}
//判满函数,满返回真,非满返回假
int list_full(SeqListPtr L)
{
return L->len==MAX;
}
//添加元素
int list_add(SeqListPtr L,datatype e)
{
//判断逻辑
if(L == NULL||list_full(L))
{
printf("输入失败\n");
return -1;
}
//将要添加的元素放在最后一个位置
L->data[L->len]=0;
L->len++;
printf("添加成功\n");
return 0;
}
//遍历顺序表
void list_show(SeqListPtr L)
{
//判断逻辑
if(L == NULL||list_empty(L))
{
printf("遍历失败\n");
return ;
}
//遍历
for(int i=0;i<L->len;i++)
{
printf("%d\t",L->data[i]);
}
printf("\n");
}
//定义任意位置插入函数
int list_insert_pos(SeqListPtr L,int pos,datatype e)
{
//判断逻辑
if(NULL == L||list_full(L)||pos<0||pos>L->len)
{
printf("插入失败\n");
return -1;
}
//腾空逻辑
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(SeqListPtr L,int pos)
{
if(NULL == L||list_empty(L)||pos<0||pos>L->len)
{
printf("删除失败\n");
return -1;
}
//删除逻辑
for(int i=pos;i<L->len-1;i++)
{
L->data[i-1]=L->data[i];//将后面的元素往前移
}
//表长度变化
L->len--;
printf("删除成功\n");
return 0;
}
//定义按值查找函数
int list_search_value(SeqListPtr L,datatype e)
{
//判断逻辑
if(NULL == L||list_empty(L))
{
printf("查找失败\n");
return -1;
}
for(int i=0;i<L->len;i++)
{
if(L->data[i]== e)
{
return i;
}
printf("找不到此函数\n");
return 0;
}
}
//定义按位置修改函数
int list_update_pos(SeqListPtr L,int pos,datatype e)
{
if(NULL == L||list_empty(L)||pos<0||pos>=L->len)
{
printf("修改失败\n");
return -1;
}
L->data[pos]=e;
printf("修改成功\n");
return 0;
}
//定义按值修改函数
int list_update_value(SeqListPtr L,datatype old_e,datatype new_e)
{
//判断逻辑
if(NULL == L||list_empty(L))
{
printf("修改失败\n");
return -1;
}
//根据旧值找位置
int res=list_search_value(L,old_e);
if(res ==-1)
{
printf("没有要修改的值\n");
return -1;
}
//调用函数进行修改
list_update_pos(L,res,new_e);
printf("修改成功\n");
return 0;
}
main.c
#include "seqlist.h"
#include <stdio.h>
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}SeqList,*SeqListPtr;
int main(int argc, char const *argv[])
{
//创建顺序表
SeqListPtr L = list_creat();
if(L == NULL)
{
return -1;
}
//调用添加函数
list_add(L, 520);
list_add(L, 1314);
list_add(L, 999);
list_add(L, 666);
//调用遍历函数
list_show(L);
//调用任意位置插入函数
list_insert_pos(L, 0, 100);
list_insert_pos(L, 2, 100);
list_insert_pos(L, 6, 100);
//输出
list_show(L);
//调用删除函数
list_delete_pos(L, 3);
list_show(L);
//调用查找函数
int res = list_search_value(L, 999);
if(res >= 0)
{
printf("您要找的元素在第%d个位置\n", res+1);
}
//调用按位置修改函数
list_update_pos(L, 0, 1234);
list_show(L);
//调用按值修改函数
list_update_value(L, 999, 888);
list_show(L);
return 0;
}