线性表的增删查改
头文件seqlist.h
#ifndef SEQLIST
#define SEQLIST
// #include <myhead.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef int datatype;
typedef struct
{
datatype data[MAXSIZE];
int length;
} Seqlist, *SeqListPtr;
// 创建顺序表
SeqListPtr list_create();
// 判空函数
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"
// 创建顺序表
SeqListPtr list_create()
{
SeqListPtr L = (SeqListPtr)malloc(sizeof(Seqlist)); // 申请内存
L->length = 0; // 原始长度为零
printf("创建成功\n");
return L;
}
// 判空函数
int list_empty(SeqListPtr L)
{
return L->length == 0;
}
// 判满函数
int list_full(SeqListPtr L)
{
return L->length == MAXSIZE;
}
// 添加元素
int list_add(SeqListPtr L, datatype e)
{
if (L == NULL || list_full(L))
{
printf("添加失败\n");
return -1;
}
// 添加元素
L->data[L->length] = e;
// 增加表长
L->length++;
printf("添加成功\n");
return 0;
}
// 打印顺序表
void list_show(SeqListPtr L)
{
if (L == NULL || list_empty(L))
{
printf("空表\n");
}
printf("表中的数据是:\n");
for (int i = 0; i < L->length; i++)
printf("%d\t", L->data[i]);
putchar(10);
printf("长度%d\n", L->length);
}
// 定义任意位置插入函数
int list_insert_pos(SeqListPtr L, int pos, datatype e)
{
if (L == NULL || list_full(L) || pos < 0 || pos > L->length)
{
printf("插入失败\n");
return -1;
}
// 移位
for (int i = L->length - 1; i >= pos; i--)
{
L->data[i + 1] = L->data[i];
}
// 增加长度
L->length++;
// 插入数据
L->data[pos] = e;
printf("插入成功\n");
return 0;
}
// 定义任意位置删除函数
int list_delete_pos(SeqListPtr L, int pos)
{
if (L == NULL || list_empty(L) || pos < 0 || pos >= L->length)
{
printf("删除失败\n");
return -1;
}
// 移位
for (int i = pos; i < L->length; i++)
{
L->data[i] = L->data[i + 1];
}
// 减小长度
L->length--;
printf("删除成功\n");
return 0;
}
// 定义按值查找位置函数
int list_search_value(SeqListPtr L, datatype e)
{
if (L == NULL || list_empty(L))
{
printf("空表\n");
return -1;
}
// 遍历查找
int flag = 0;
for (int i = 0; i < L->length; i++)
{
if (L->data[i] == e)
{
printf("数据下标是%d\n", i);
flag = 1;
}
}
if (flag == 0)
{
printf("没找到\n");
return -1;
}
return 0;
}
// 按位置进行修改
int list_update_pos(SeqListPtr L, int pos, datatype e)
{
if (NULL == L || pos < 0 || pos >= L->length || list_empty(L))
{
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 (L == NULL || list_empty(L))
{
printf("空表\n");
return -1;
}
int flag = 0;
for (int i = 0; i < L->length; i++)
{
if (L->data[i] == old_e)
{
L->data[i] = new_e;
flag = 1;
}
}
if (flag == 0)
{
printf("没找到\n");
return -1;
}
printf ("修改成功\n");
return 0;
}
测试文件main.c
#include "seqlist.h"
int main(int argc, char const *argv[])
{
SeqListPtr L = list_create();
list_add(L, 1);
list_add(L, 2);
list_add(L, 3);
list_add(L, 4);
list_add(L, 5);
list_show(L);
list_insert_pos(L,1,8);
list_delete_pos(L,3);
list_search_value(L,4);
list_show(L);
list_update_pos(L,5,7);
list_update_value(L,1,5);
list_show(L);
return 0;
}
附加知识
vim编辑器配置C语言程序片段- 先找到文件夹:/home/ubuntu/.vim/snippets
打开其中的c.snippets并编辑
标签:return,线性表,int,SeqListPtr,list,pos,printf,操作,函数 From: https://blog.csdn.net/sjrhsk_hahaha/article/details/140377144