#include <stdio.h> // 输入输出标准库
#include <stdlib.h> // malloc, realloc, exit等函数
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
// 线性表的顺序存储结构
typedef struct sqList {
int* elem; // 数据元素矩阵首地址
int length; // 当前元素个数
int listsize; // 最大元素个数
}SqList;
// 初始化顺序表
int InitList_Sq(SqList& L) {
L.elem = (int*)malloc(sizeof(int) * LIST_INIT_SIZE); // 动态分配内存
if (!L.elem) // 动态分配内存完毕后,一定要判断是否分配成功
exit(OVERFLOW);
// L.elem[0/1/2/3...]的初值是多少?
L.length = 0; // 当前元素个数0
L.listsize = LIST_INIT_SIZE; // 最大元素个数
return OK;
}
// 在顺序表L的第i个位置之前插入元素e
int ListInsert_Sq(SqList& L, int i, int e) {
if ((i < 1) || (i > L.length + 1)) // 插入位置i是否合法
return ERROR;
if (L.length >= L.listsize) { // 顺序表是否已满
int* newbase = (int*)realloc(L.elem,
sizeof(int) * (L.listsize + LISTINCREMENT)); // 重新申请空间
if (!newbase)
exit(OVERFLOW);
L.elem = newbase; // 更新基址
L.listsize = L.listsize + LISTINCREMENT; // 更新最大容量
}
for (int k = L.length; k >= i; k--) { // 数据依次后移
L.elem[k] = L.elem[k - 1];
}
L.elem[i - 1] = e; // 插入数据
L.length = L.length + 1; // 更新元素数量
return OK;
}
// 将顺序表L的第i个位置的数据删除 (将删除值赋给e并返回)
int ListDelete_Sq(SqList& L, int i, int& e) {
if ((i < 1) || (i > L.length)) // 删除位置i是否合法
return ERROR;
e = L.elem[i - 1]; // 返回数据
for (int k = i + 1; k <= L.length; k++) { // 将第i+1到第N个元素前移
L.elem[k - 2] = L.elem[k - 1]; //
}
L.length = L.length - 1; // 更新元素数量
return OK;
}
int main(void)
{
SqList L;
int a[10]= { 11,12,13,14,15,16,17,18,19,20 };
/*for (int i = 0; i < 10; i++) {
scanf_s("%d", a[i]);
}*/
int n = sizeof(int);
// 初始化顺序表
int isDone = InitList_Sq(L);
// 建立一个初始序列, 长度10.
for (int i = 0; i < 10; i++) {
isDone = ListInsert_Sq(L, i + 1, a[i]);
}
for (int i = 0; i < L.length; i++) {
printf("%d ", L.elem[i]);
}
printf("\n");
// 在第5个位置插入999
isDone = ListInsert_Sq(L, 5, 999);
for (int i = 0; i < L.length; i++) {