文章目录
顺序表的插入与删除(静态分配)
顺序表的插入(静态分配)
逻辑结构图示
- 由图可知,在顺序表的某个位置插入数据,后面的数据需要依次向后移动一个位置,然后把所需要插入的数据插入到所指定的位置
头文件以及定义初始值
#include <stdio.h>
#define Maxsize 10 //数组所存放的数据最大数量
定义顺序表
typedef struct {
int data[Maxsize];//用静态的数组存放数据
int length; //顺序表的长度
}SeqList;
初始化顺序表
void InitList(SeqList* L) {
L->length = 0;
}
- 因为此次代码是基于静态数组来存放的,所以不需要开辟空间,只需要对顺序表的长度进行初始化
插入元素
// 插入元素
int ListInsert(SeqList* L, int i, int e) {
//判断插入位置是否合法
if (i<1 || i>L->length + 1)
{
return 0;
}
if (L->length>=Maxsize)
{
return 0;
}
//顺序表元素依次向后移动一位
for (int j = L->length; j >= i; j--)
{
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e; //传进来的是数组的第几个元素,插入的时候是按照下标插入,所以这里一定要注意减1
L->length++; //数组内元素个数加1,长度加1
return 1;
}
原理图
测试代码
int main()
{
SeqList L;
InitList(&L);
//向顺序表中插入几个元素
int i = 0;
for (i = 0; i < 7; i++)
{
L.data[i] = i + 1;
L.length++;
}
//查看顺序表中的数据
for (i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
int result = ListInsert(&L, 3, 10);
if (result)
{
printf("\n可以插入元素,插入后的元素遍历结果\n");
}
for (i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
return 0;
}
运行结果
完整代码
//定义一个顺序表
#define Maxsize 10
typedef struct {
int data[Maxsize];//用静态的数组存放数据
int length;
}SeqList;
void InitList(SeqList* L) {
L->length = 0;
}
// 插入元素
int ListInsert(SeqList* L, int i, int e) {
if (i<1 || i>L->length + 1)
{
return 0;
}
if (L->length>=Maxsize)
{
return 0;
}
for (int j = L->length; j >= i; j--)
{
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e;
L->length++;
return 1;
}
int main()
{
SeqList L;
InitList(&L);
//向顺序表中插入几个元素
int i = 0;
for (i = 0; i < 7; i++)
{
L.data[i] = i + 1;
L.length++;
}
//查看顺序表中的数据
for (i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
int result = ListInsert(&L, 3, 10);
if (result)
{
printf("\n可以插入元素,插入后的元素遍历结果\n");
}
for (i = 0; i < L.length; i++)
{
printf("%d ", L.data[i]);
}
return 0;
}
顺序表的删除(静态分配)
逻辑结果图示
3.2头文件以及定义初始值
#include <stdio.h>
#define MaxSize 10
定义顺序表(静态分配)
typedef struct {
int data[MaxSize];
int lengh;
} seqList;
初始化顺序表
void InitList(seqList* L)
{
L->lengh = 0;
}
顺序表元素的删除操作
int deleteList(seqList* L, int i, int* e)
{
//判断删除位置是否合法
if (i<1 || i>L->lengh)
{
return 0;
}
//将将要删除元素赋值给e
*e = L->data[i - 1];
int j = 0;
for (j = i; j < L->lengh; j++)
{
L->data[j - 1] = L->data[j];
}
L->lengh--;
return 1;
}
原理图
测试代码
int main()
{
//声明一个顺序表
seqList L;
//初始化顺序表
InitList(&L);
//插入10个数据
int i = 0;
for (i = 0; i < 10; i++)
{
L.data[i] = i + 1;
L.lengh++;
}
//查看顺序表
printf("删除前的结果如下:顺序表的长度为:%d\n", L.lengh);
for (i = 0; i < L.lengh; i++)
{
printf("%d ", L.data[i]);
}
//删除数据表中某个位置的某个元素 删除第三个位置的元素并返回该元素
int e = -1;
int result = deleteList(&L,3,&e);
//判断是否删除成功
if (result)
{
//返回1表示删除成功
printf("\n删除元素成功,删除的元素为:%d\n", e);
}
else
{
printf("\n删除元素位置不合法,删除失败");
}
//遍历删除后的结果
printf("删除后的结果如下:顺序表的长度为:%d\n",L.lengh);
for (i = 0; i < L.lengh; i++)
{
printf("%d ", L.data[i]);
}
return 0;
}
运行结果
完整代码
#include <stdio.h>
#define MaxSize 10
typedef struct {
int data[MaxSize];
int lengh;
} seqList;
void InitList(seqList* L)
{
L->lengh = 0;
}
int deleteList(seqList* L, int i, int* e)
{
//判断删除位置是否合法
if (i<1 || i>L->lengh)
{
return 0;
}
//将将要删除元素赋值给e
*e = L->data[i - 1];
int j = 0;
for (j = i; j < L->lengh; j++)
{
L->data[j - 1] = L->data[j];
}
L->lengh--;
return 1;
}
int main()
{
//声明一个顺序表
seqList L;
//初始化顺序表
InitList(&L);
//插入10个数据
int i = 0;
for (i = 0; i < 10; i++)
{
L.data[i] = i + 1;
L.lengh++;
}
//查看顺序表
printf("删除前的结果如下:顺序表的长度为:%d\n", L.lengh);
for (i = 0; i < L.lengh; i++)
{
printf("%d ", L.data[i]);
}
//删除数据表中某个位置的某个元素 删除第三个位置的元素并返回该元素
int e = -1;
int result = deleteList(&L,3,&e);
//判断是否删除成功
if (result)
{
//返回1表示删除成功
printf("\n删除元素成功,删除的元素为:%d\n", e);
}
else
{
printf("\n删除元素位置不合法,删除失败");
}
//遍历删除后的结果
printf("删除后的结果如下:顺序表的长度为:%d\n",L.lengh);
for (i = 0; i < L.lengh; i++)
{
printf("%d ", L.data[i]);
}
return 0;
}
本次的博客内容就到这里了,如果本篇博客对您有帮助的话还请一键三连,您的支持就是我的最大动力啊!!