编辑代码

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define InitialSize 20

//定义顺序表
typedef struct SqList {
    int* data;
    int length;
    int MaxSize;
} SqList;

//初始化顺序表
bool InitialList(SqList* L) {
    L->data = (int*)malloc(sizeof(int) * InitialSize);
    L->length = 0;
    L->MaxSize = InitialSize;
    return true;
}

//顺序表扩容
bool CreaseListSize(SqList* L, int len) {
    int* p = L->data;
    //重新分配内存
    L->data = (int*)malloc(sizeof(int) * (L->MaxSize + len));
    //将值拷贝至新分配到内存空间
    for (int i = 0; i < L->length; i++) {
        L->data[i] = p[i];
    }
    L->MaxSize += len;
    free(p);//释放p的内存
    return true;
}

//在指定位置插入数据
bool InsertList(SqList* L, int i, int e) {
    if (i < 1 || i > L->length + 1)
        return false;
    if (L->length == L->MaxSize) {
        CreaseListSize(L, InitialSize);
    }
    for (int j = L->length; j >= i; j--) {
        L->data[j] = L->data[j - 1];
    }
    L->data[i - 1] = e;
    L->length++;
    return true;
}

//删除数据
bool DeleteList(SqList* L, int i) {
    if (i < 1 || i > L->length)
        return false;
    if (L->length == 0)
        return false;
    for (int j = i; j < L->length; j++) {
        L->data[j - 1] = L->data[j];
    }
    L->length--;
    return true;
}

//按照位序获取数据
int GetElem(SqList L, int i) {
    if (i < 1 || i > L.length) {
        printf("位序错误");
        return -1;
    }
    return L.data[i - 1];
}

//打印顺序表
void PrintList(SqList L) {
    for (int i = 0; i < L.length; i++)
        printf("%d ", L.data[i]);
    printf("\n");
}

int main() {
    SqList L;
    bool success;

    //初始化顺序表
    success = InitialList(&L);
    if (!success) {
        printf("初始化失败\n");
        return 0;
    }

    //插入数据
    for (int i = 1; i <= 10; i++) {
        InsertList(&L, i, i);
    }

    //输出数据
    PrintList(L);

    //删除数据
    DeleteList(&L, 5);

    //输出数据
    PrintList(L);

    //获取元素
    int element = GetElem(L, 3);
    printf("第三个元素是:%d\n", element);

    return 0;
}