#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10
#define Status int
//定义顺序表
typedef struct
{
int data[MaxSize] = {1,2,3,4,5,6,7,8,9,10}; //线性表占用的数组空间
int length; //存储线性表的长度
}SqList;
//初始化顺序表
void InitList(SqList *L)
{
L->length=0; //表长为零
}
//插入操作
Status ListInsert(SqList *L, int i, int e) //在第i个位置上插入新元素e,使长度为n的线性表变为长度n+1
{
if(i < 1 || i > L->length + 1)
{
printf("插入位置不合法\n");
return 0;
}
if(L->length == MaxSize)
{
printf("存储空间已满");
return 0;
}
for(int j = L->length - 1; j >= i - 1; j--)//length-1(如果存入了n个元素,则最后一个元素的下标为n-1,这里的下标是指数组的下标)
{
L->data[j+1] = L->data[j];//从数组的最后一个元素开始,把它的值赋给其下一个位置,这样第i(相当于data[i-1])个位置就空出来了
}
L->data[i-1] = e;
L->length++;
return 1;
}
//删除操作
int ListDelete(SqList *L, int i, int *e)
{
if(i < 1 || i > L->length)
{
printf("删除位置错误\n");
return 0;
}
if(L->length==0)
{
printf("表中没有可删的元素\n");
return 0;
}
*e=L->data[i-1]; //将被删除的元素赋值给e
for(int j = i; j <= L->length-1; j++)
{
L->data[j-1]=L->data[j]; //将第i个位置后的元素前移
}
L->length--;
return 1;
}
//遍历顺序表
void printfList(SqList *L)
{
for(int i = 0; i < L->length; i++)
{
printf("%d ",(L->data[i]));
}
}
int main()
{
SqList L;
InitList(&L);
// int data[10]={1,2,3,4,5,6,7,8,9,10};
int i = 3;
int e = 666;
ListInsert(&L, i, e);
printfList(&L);
if(ListDelete(&L, 3, &e))
printf("已删除第3个元素,删除元素值= %d\n",e);
}