<数据结构>顺序表的插入、删除操作
程序员文章站
2022-03-01 23:20:21
...
插入操作
#include<stdio.h>
#define maxSize 10 //定义最大长度
/*静态分配实现顺序表
缺点:数组存满了无法扩大空间,因此对应的有动态分配实现数组
*/
struct List
{
int data[maxSize]; //用静态的“数组”存放数据
int length; //顺序表的当前长度,即实际已经存放的数据
};
struct List SqList;
void InitList(struct List *L)
{
L->length = 0;
}
_Bool InsertList(struct List *L, int position, int e)
{
if (position <0|| position > L->length)
//判断插入位置是否合法
{
printf("error position!insert fail!\n");
return 0;
}
if (L->length >= maxSize)
{
printf("存储空间已满\n");
return 0;
}
for (int i = L->length-1; i >= position; i--)
{
L->data[i + 1] = L->data[i]; //将位置在position及其以后的元素从后往前向后移一位
}
L->data[position] = e;
L->length++;
return 1;
}
int Main1()
{
InitList(&SqList);
for (int i = 0; i < maxSize; i++) //初始化数据
{
SqList.data[i] = i * 5;
SqList.length++;
}
printf("初始化后的数据:");
for (int i = 0; i < SqList.length; i++)
{
printf("%d\t", SqList.data[i]);
}
printf("\n");
InsertList(&SqList, 7, 6);
printf("插入后数据:");
for (int i = 0; i < SqList.length; i++)
{
printf("%d\t", SqList.data[i]);
}
return 0;
}
运行结果:
删除操作
_Bool ListDelete(struct List *L, int position, int *e),删除下标为position的元素,并用e返回删除元素的值
_Bool ListDelete(struct List *L, int position, int *e)
{
if (position<0 || position>L->length - 1)
{
return 0;
}
if (L->length <= 0)
{
return 0;
}
*e = L->data[position];
for (int i = position; i < L->length; i++)
{
L->data[i] = L->data[i + 1];
}
L->length--;
return 1;
}