c语言中类似vector的功能
时间: 2024-10-24 08:02:31 浏览: 21
在C语言中,并没有内置像Vector那样可以直接存储一组动态大小元素的数据结构,不过你可以通过数组或者链表等基础数据结构来模拟实现类似功能。以下是两种常见的实现方式:
1. 数组实现:
- **动态数组**:可以预先设定一个最大容量,然后通过指针和递增操作来添加或删除元素,如`struct Vector`:
```c
typedef struct {
int* data; // 数据地址
size_t size; // 当前元素数
size_t capacity; // 最大容量
} Vector;
void resize(Vector* vec, size_t new_capacity) {
if (new_capacity > vec->capacity) {
vec->data = realloc(vec->data, sizeof(int) * new_capacity);
vec->capacity = new_capacity;
}
}
void push_back(Vector* vec, int value) {
if (vec->size == vec->capacity) resize(vec, vec->capacity * 2); // 动态扩容
vec->data[vec->size++] = value;
}
```
2. 链表实现:
- **动态链表**:链表节点包含一个整数值和指向下一个节点的指针,可以根据需要随时添加新节点:
```c
typedef struct Node {
int value;
struct Node* next;
} Node;
struct List {
Node* head;
size_t size;
};
void list_push_back(List* list, int value) {
Node* newNode = malloc(sizeof(Node));
newNode->value = value;
newNode->next = list->head;
list->head = newNode;
list->size++;
}
```
这两种方式都有其优缺点,动态数组适合插入和访问元素频繁的情况,而链表更适合插入和删除元素频繁且不需要随机访问的情况下。
阅读全文