c语言ArrayList
时间: 2024-12-26 13:26:56 浏览: 8
### C语言中的动态数组实现
在C语言中,虽然没有内置的`ArrayList`类来提供自动管理大小的功能,但是可以通过手动分配和重新分配内存的方式来模拟这一特性。以下是通过自定义函数创建类似于`ArrayList`功能的方法。
#### 动态数组初始化
为了模仿Java中的`ArrayList`行为,在C语言里通常会先声明一个指针变量指向一块已分配的空间,并设定初始容量。随着元素数量的增长超出当前容量,则需调用realloc()扩大这块区域的尺寸[^1]。
```c
#include <stdlib.h>
typedef struct {
int *elements; // 存储实际数据项的数组
size_t used; // 已经使用的元素数目
size_t allocated; // 当前分配给数组的最大长度
} DynamicArray;
```
#### 添加新元素到动态数组
每当向该结构体添加新的成员时,如果发现剩余可用位置不足,则应提前增加其内部缓冲区大小以容纳更多项目。这里采用倍增策略(每次增长一倍),从而减少频繁调整带来的开销[^2]。
```c
void dynamic_array_add(DynamicArray *array, int element) {
if (array->used == array->allocated) {
array->allocated *= 2;
array->elements = realloc(array->elements, sizeof(int) * array->allocated);
}
array->elements[array->used++] = element;
}
```
#### 初始化与释放资源
除了上述核心逻辑外,还需要考虑对象生命周期内的其他方面——即如何安全地构造实例以及适时清理不再需要占用的堆上资源。为此提供了两个辅助性的接口用于处理这些场景下的工作[^3]。
```c
DynamicArray* create_dynamic_array(size_t initial_size) {
DynamicArray *new_array = malloc(sizeof(DynamicArray));
new_array->elements = malloc(initial_size * sizeof(int));
new_array->used = 0;
new_array->allocated = initial_size;
return new_array;
}
void free_dynamic_array(DynamicArray *array) {
free(array->elements);
free(array);
}
```
阅读全文