编辑代码

#include <stdio.h>
#include <stdlib.h> // 需要包含这个头文件来使用 malloc

#define InitSize 10

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

// 初始化顺序表
void InitList(SqList *L) {
    L->data = (int *)malloc(InitSize * sizeof(int)); // 动态分配内存
    if (L->data == NULL) { // 检查 malloc 是否成功
        printf("Memory allocation failed.\n");
        exit(1);
    }
    L->length = 0;
    L->MaxSize = InitSize;
}

// 增加顺序表的大小
void IncreaseList(SqList *L, int len) {
    int *p = L->data;
    L->data = (int *)malloc((L->MaxSize + len) * sizeof(int)); // 动态分配新内存
    if (L->data == NULL) { // 检查 malloc 是否成功
        printf("Memory allocation failed.\n");
        exit(1);
    }
    for (int i = 0; i < L->length; i++) {
        L->data[i] = p[i]; // 复制旧数据到新空间
    }
    L->MaxSize += len; // 更新最大容量
    free(p); // 释放旧空间
}

int main () {
    // 声明顺序表
    SqList L;

    // 初始化顺序表
    InitList(&L);

    // 向顺序表添加元素
    for (int i = 0; i < 10; i++) {
        L.data[i] = i + 1; // 插入数据
        L.length++; // 更新长度
    }

    // 增加顺序表的大小
    IncreaseList(&L, 7);

    // 在扩容后添加更多元素
    for (int i = 10; i < 17; i++) {
        L.data[i] = i + 1; // 插入更多数据
        L.length++; // 更新长度
    }

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

    return 0;
}