C 语言实现 C# 中的 List 泛型列表

//下面是一个简单的用 C 语言实现 C# 中的 List 泛型列表的示例代码,代码中有详细的注释,帮助你理解代码的实现细节。
人工智能生成的. 以后可以用人工智能实现很多代码了.
简单的活让它来干.

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

// 定义一个泛型列表的结构体
typedef struct List {
    
    
    void **items;    // 用 void * 存储泛型元素
    size_t size;     // 存储元素的大小
    size_t count;    // 存储元素的数量
    size_t capacity; // 存储列表的容量
} List;

// 初始化一个泛型列表
List *List_Init(size_t size) {
    
    
    List *list = malloc(sizeof(List)); // 为列表结构体分配内存
    list->items = malloc(sizeof(void *) * 4); // 为列表元素分配内存
    list->size = size; // 存储元素的大小
    list->count = 0; // 初始化元素数量为 0
    list->capacity = 4; // 初始化列表容量为 4
    return list; // 返回列表结构体的指针
}

// 向泛型列表中添加一个元素
void List_Add(List *list, void *item) {
    
    
    // 如果列表的元素数量等于列表的容量,需要扩容
    if (list->count == list->capacity) {
    
    
        list->capacity *= 2; // 容量扩大为原来的 2 倍
        list->items = realloc(list->items, sizeof(void *) * list->capacity); // 重新分配内存
    }
    // 复制元素的数据到列表的末尾
    list->items[list->count] = malloc(list->size); // 为元素分配内存
    memcpy(list->items[list->count], item, list->size); // 复制元素的数据
    list->count++; // 元素数量加 1
}

// 从泛型列表中获取一个元素
void *List_Get(List *list, size_t index) {
    
    
    // 如果索引越界,返回 NULL
    if (index >= list->count) {
    
    
        return NULL;
    }
    // 返回索引对应的元素
    return list->items[index];
}

// 从泛型列表中移除一个元素
void List_Remove(List *list, size_t index) {
    
    
    // 如果索引越界,返回
    if (index >= list->count) {
    
    
        return;
    }
    // 释放元素的内存
    free(list->items[index]);
    // 将列表中的元素向前移动
    for (size_t i = index; i < list->count - 1; i++) {
    
    
        list->items[i] = list->items[i + 1];
    }
    list->count--; // 元素数量减 1
}

// 销毁一个泛型列表
void List_Destroy(List *list) {
    
    
    // 释放列表中的元素的内存
    for (size_t i = 0; i < list->count; i++) {
    
    
        free(list->items[i]);
    }
    // 释放列表元素的内存
    free(list->items);
    // 释放列表结构体的内存
    free(list);
}

int main() {
    
    
    // 初始化一个存储 int 类型的泛型列表
    List *list = List_Init(sizeof(int));
    // 向列表中添加元素
    int a = 1, b = 2, c = 3;
    List_Add(list, &a);
    List_Add(list, &b);
    List_Add(list, &c);
    // 从列表中获取元素
    int *p = List_Get(list, 1);
    printf("%d\n", *p); // 输出 2
    // 从列表中移除元素
    List_Remove(list, 1);
    // 销毁列表
    List_Destroy(list);
    return 0;
}
// ```

// 希望这个示例代码能帮助你理解如何用 C 语言实现一个泛型列表。

猜你喜欢

转载自blog.csdn.net/phker/article/details/131232021
今日推荐