(目录)

在这里插入图片描述 动态顺序表是一个可以根据需要动态调整大小的数据结构。当元素数量超出当前顺序表容量时,需要进行内存扩容来适应更多元素的存储需求。

下面是使用C语言实现动态顺序表内存扩容的代码:

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

// 定义动态顺序表结构体
typedef struct {
    int *data;      // 数据指针
    int length;     // 当前元素个数
    int capacity;   // 当前容量
} DynamicList;

// 初始化动态顺序表
void initDynamicList(DynamicList *list, int capacity) {
    list->data = (int*)malloc(capacity * sizeof(int));
    list->length = 0;
    list->capacity = capacity;
}

// 扩容动态顺序表
void expandDynamicList(DynamicList *list, int newCapacity) {
    int *newData = (int*)malloc(newCapacity * sizeof(int));
    for (int i = 0; i < list->length; i++) {
        newData[i] = list->data[i];
    }
    free(list->data);
    list->data = newData;
    list->capacity = newCapacity;
}

// 插入元素到动态顺序表
void insertElement(DynamicList *list, int element) {
    if (list->length >= list->capacity) {
        expandDynamicList(list, list->capacity * 2);   // 扩容为当前容量的两倍
    }
    list->data[list->length++] = element;
}

// 打印动态顺序表
void printDynamicList(DynamicList *list) {
    for (int i = 0; i < list->length; i++) {
        printf("%d ", list->data[i]);
    }
    printf("\n");
}

// 释放动态顺序表内存
void freeDynamicList(DynamicList *list) {
    free(list->data);
    list->data = NULL;
    list->length = 0;
    list->capacity = 0;
}

int main() {
    DynamicList list;
    initDynamicList(&list, 5);   // 初始化容量为5的动态顺序表

    insertElement(&list, 1);    // 插入元素1
    insertElement(&list, 2);    // 插入元素2
    insertElement(&list, 3);    // 插入元素3
    insertElement(&list, 4);    // 插入元素4
    insertElement(&list, 5);    // 插入元素5
    insertElement(&list, 6);    // 插入元素6

    printDynamicList(&list);    // 打印动态顺序表

    freeDynamicList(&list);     // 释放动态顺序表内存

    return 0;
}

上述代码中,DynamicList 结构体包含了一个 int 类型的数据指针 data,用于存储元素数据。length 表示当前元素个数,capacity 表示当前容量。

initDynamicList 函数用于初始化动态顺序表,根据传入的容量参数进行内存分配。

expandDynamicList 函数用于扩容动态顺序表,根据传入的新容量参数进行内存重新分配,并将原有元素复制到新的内存空间中。

insertElement 函数用于向动态顺序表中插入元素,如果当前元素个数已经超过当前容量,则调用 expandDynamicList 函数进行扩容。

printDynamicList 函数用于打印动态顺序表中的元素。

freeDynamicList 函数用于释放动态顺序表的内存。

main 函数中,我们首先初始化一个容量为 5 的动态顺序表,然后连续插入 6 个元素,超出容量后会自动进行扩容。最后打印动态顺序表,并释放内存。

希望这个例子能帮助你理解动态顺序表的内存扩容操作。