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

这篇具有很好参考价值的文章主要介绍了C 语言实现 C# 中的 List 泛型列表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

//下面是一个简单的用 C 语言实现 C# 中的 List 泛型列表的示例代码,代码中有详细的注释,帮助你理解代码的实现细节。
人工智能生成的. 以后可以用人工智能实现很多代码了.
简单的活让它来干.文章来源地址https://www.toymoban.com/news/detail-496594.html

#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 语言实现一个泛型列表。

到了这里,关于C 语言实现 C# 中的 List 泛型列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • List列表操作中的坑

    使用 Arrays.asList 把数据转换为 List 的三个坑 在如下代码中,我们初始化三个数字的 int[]数组,然后使用 Arrays.asList 把数组转换为 List: 但,这样初始化的 List 并不是我们期望的包含 3 个数字的 List。通过日志可以发现,这个 List 包含的其实是一个 int 数组,整个 List 的元素个

    2024年01月20日
    浏览(47)
  • 【Python】分割列表(list)方法详解:平均n等份、拆成一个一个的

    在日常开发中,有时候需要把一个大列表分割为固定的小列表,再进行相关处理。下面来看看详细的分割方法: 2.1 分割大列表为1个元素的小列表 2.2 分割大列表为3个元素的小列表 2.2.1 普通方法 2.2.2 改进方法 改进:用列表推导,结果都放到一个列表。 2.2.3 lambda方法 2.3 平均

    2024年02月03日
    浏览(43)
  • [开发|java] 将一个Java字符串按逗号分割成一个列表(List)

    可以使用Java的 split() 方法将字符串分割成字符串数组,然后将数组转换为列表。以下是一个示例代码: 输出 在上述代码中,我们使用 split(\\\",\\\") 方法将字符串 str 按逗号分割成一个字符串数组,然后使用 Arrays.asList() 方法将数组转换为列表。最后,我们打印输出列表的内容。

    2024年02月16日
    浏览(59)
  • python 一次性删除列表(list)的空白元素(空内容) 或者 一次性删除列表(list)中的指定元素

    看看下述代码: 输出: 当你遇见这种情况,有哪些方法来去除里面的空内容呢(即 \\\'\\\' )? 1.1 删除空内容(方法一) : 输出: 1.2 删除空内容(方法二) : 需要 配合 lambda 表达式 一起使用! 输出: 2.3 删除指定内容 : 输出: 注 :此方法既可以删除空元素,也可以删除指

    2024年02月03日
    浏览(94)
  • R语言学习笔记--列表list、数据框

    1-列表 列表 可以包含不同类型的 对象 ,也就是说,列表不是将某些具体的值组织起来,而是组织R对象。列表将数据组织在一个一维集合中。 列表非常好用,因为它可以装任何类型的对象,不要求数据之间是同质的。 创建列表 list()  以上代码,创建了一个列表,其中第一个

    2024年02月15日
    浏览(53)
  • Python中的列表生成式(List Comprehensions)和列表生成器(Generator)

    Python中的列表生成式(List Comprehensions)和列表生成器(Generator),是Python提供的两个高级应用机制。 生成式是一种简写机制,坚持了龟叔的“Python要简单优雅”的设计理念。 生成器虽然翻译成中文以后只有一字之差,但是实现的机制和生成式已经完全不同了。它存储的是一个

    2024年02月05日
    浏览(54)
  • c# 判断一个字符串列表是否包含另一个字符串列表中某一个元素

    当需要判断一个字符串列表是否包含另一个字符串列表中的某个元素时,可以使用 LINQ 查询来完成。下面是一个示例方法: 在上面的示例中,我们有两个字符串列表 list1 和 list2。我们想要判断 list1 是否包含了 list2 中的某个元素。 我们定义了 ListContainsElement 方法,该方法接

    2024年02月12日
    浏览(83)
  • 【100个 Unity实用技能】☀️ | C#泛型集合常用方法,查找符合要求的第一个元素并返回

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月08日
    浏览(63)
  • 初识Go语言25-数据结构与算法【堆、Trie树、用go中的list与map实现LRU算法、用go语言中的map和堆实现超时缓存】

      堆是一棵二叉树。大根堆即任意节点的值都大于等于其子节点。反之为小根堆。   用数组来表示堆,下标为 i 的结点的父结点下标为(i-1)/2,其左右子结点分别为 (2i + 1)、(2i + 2)。 构建堆   每当有元素调整下来时,要对以它为父节点的三角形区域进行调整。 插入元素

    2024年02月12日
    浏览(59)
  • springboot读取yml文件中的list列表、数组、map集合和对象方法实例

    目录前言application.yml定义list集合application.yml定义数组类型总结 前言 springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型,支持类对象类型,下面我们来实战下这些形式的配置如何取值 applicatio

    2024年02月09日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包