首页 > 其他分享 >基于C语言的通用型数据结构与容器库

基于C语言的通用型数据结构与容器库

时间:2022-10-29 11:13:47浏览次数:81  
标签:容器 begin list C语言 通用型 数据结构 sizeof

仓库地址:
github:https://github.com/hellototoro/hlibc
gitee:https://gitee.com/totorohello/hlibc

list

双向序列容器,用于将它们的元素保持为线性排列,并允许在序列的任何位置插入和删除。

 

 

API (模仿c++的list容器)

定义并初始化

list_t list;
list_init(&list);

插入元素

int a = 7;
list.push_back(&list, &a, sizeof(a));
/* ... */
list.push_front(&list, &a, sizeof(a));
/* ... */
list_iterator_t it = list.begin(&list);
list.insert(&it, &a, sizeof(a));

迭代器

for (list_iterator_t it = list.begin(&list); it.begin != it.end; it.forward(&it)) {
    std::cout << DATA_CAST(int)it.data(&it) << " ";
}
/* ... */
it.forward_to(&it, 2);
std::cout << "it = " << DATA_CAST(int)it.data(&it) << std::endl;

删除元素

list.pop_back(&list);
list.pop_front(&list);

1、为什么要写这个库?

在C语言中,由于不能泛型编程,所以能开箱即用的数据结构很少,一般都要自己造轮子(现在亦是如此)。

2、如何使用C语言进行“泛型”编程?

虽然在C语言中不能使用模板,但是可以使用万能指针(void*)来替代。

3、目前有哪些使用方式?

标签:容器,begin,list,C语言,通用型,数据结构,sizeof
From: https://www.cnblogs.com/jank/p/16838272.html

相关文章

  • C语言“我的家谱”程序
    C语言“我的家谱”程序建立“我的家谱”问题家谱:又称族谱,是记载一个家族的世系繁衍及重要人物事迹的书。家谱中记录着父亲、母亲和孩子的姓名。请大家利用二叉树设计一个......
  • 学习笔记之——C语言 函数
    采用函数的原因:随着程序规模的变大,产生了以下问题:——main函数变得相当冗杂——程序复杂度不断提高——代码前后关联度提高,修改代码往往牵一发而动全身——变量使用过......
  • 数据结构 玩转数据结构 4-3 使用链表的虚拟头结点
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13446 1重点关注1.1代码草图解析 1.2为何为链表头设立虚拟头节点为......
  • c语言中内存管理的基础知识(上)
    作用域​C语言变量的作用域:(C语言编译器可以确认四种不同类型的作用域)代码块作用域作用范围就是{}之间的代码原型作用域函数体去掉代码块的部分函数作用......
  • 数据结构整理笔记(未完)
    链表本质上是一个结构体指向下一个结构体,第一个结构体为链头,重点是指向下一个(next)结构体代码实现创建链表structElement//链表元素{char*nam......
  • C语言——动态内存管理
    一.为什么存在动态内存分配//局部变量inta=2;//在栈区开辟4个字节chararr[10]={0};//在栈区开辟10个字节的连续的空间上述的空间开辟方式有两个特点:开辟空间大小是固......
  • 初始C语言
     基本了解C语言的基础知识,对C语言有一个大概的认识。每个知识点就是简单认识,不做详细讲解重点:什么是C语言第一个C语言程序数据类型变量、常量字符串+转义字符+注释选择语句......
  • 初识c语言
    前言小伙伴们大家好,今天开始,我们即将开启c语言的正是学习,从初级到进阶,想必大家都听说过c生万物,可想而知c语言对于我们程序员的重要之处,从此篇博客开始将持续更新c语言的相关......
  • 数据结构 玩转数据结构 4-2 在链表中添加元素
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13430 1重点关注1.1链表插值动画模拟(可以理解为火车尾加车厢,只不过是火车尾被称......
  • Rdis 基本数据结构
    首先介绍redis底层实际存储数据的八种数据类型:一、简单的动态字符串(SDS)定义结构:structsdshdr{    intlen;  //记录buf数组使用的字节数量,也等于SDS保存字符......