(目录)
动态顺序表是一个可以根据需要动态调整大小的数据结构。当元素数量超出当前顺序表容量时,需要进行内存扩容来适应更多元素的存储需求。
下面是使用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 个元素,超出容量后会自动进行扩容。最后打印动态顺序表,并释放内存。
希望这个例子能帮助你理解动态顺序表的内存扩容操作。