#include <iostream>
#define MaxSize 50
using namespace std;
// 静态线性表,规定下标从1开始
typedef struct {
int data[MaxSize]; // 顺序表元素
int length = 0; // 顺序表当前长度,初始化为0
}SqlList;
// 线性表初始化
void ListInit(SqlList &L)
{
L.length = 10;
for (int i = 0; i < 10; i ++)
L.data[i] = i + 1;
}
// 元素插入 参数(顺序表、插入位置、元素值)
bool ListInsert(SqlList &L, int i, int x)
{
// 判断插入位置是否合法
if (i < 1 || i > L.length+1)
return false;
// 判断线性表是否已满
if (L.length >= MaxSize)
return false;
// 将第i个位置之后的元素后移,为x提供插入位置
for (int j = L.length; j >= i; j --)
L.data[j] = L.data[j-1];
// 将x插入,并长度+1
L.data[i-1] = x;
L.length ++;
return true;
}
// 元素删除 参数(顺序表、删除位置、被删除元素的值)
bool ListDelete(SqlList &L, int i, int &x)
{
// 判断删除位置是否合法
if (i < 1 || i > L.length)
return false;
// 将被删除元素复制给x
x = L.data[i-1];
// 将之后的元素前移
for (int j = i-1; j < L.length-1; j ++)
L.data[j] = L.data[j+1];
// 线性表长度-1
L.length --;
}
// 按顺序打印线性表
void printList(SqlList L)
{
for (int i = 0; i < L.length; i ++)
cout << L.data[i] << ' ';
cout << endl;
}
int main()
{
SqlList L;
ListInit(L);
cout << "初始化后:";
printList(L);
ListInsert(L, 3, 111);
cout << "插入后:";
printList(L);
int x;
ListDelete(L,2,x);
cout << "被删除元素 x:" << x << endl;
cout << "删除后:";
printList(L);
return 0;
}