全称: Universal C standard library 基于C语言实现的通用C库。包含常用数据结构和算法
Go to file
2026-05-16 01:57:07 +08:00
.vscode bugfix(stack): 栈的stack_new宏定义多套了一层sizeof,展开后sizeof(sizeof(int)),让obj_size=8了 2026-05-13 21:50:31 +08:00
3rdparty refactor(darray): 优化内存策略并移除动态扩容开关。固定容量场景交由上层封装,darray不再支持。 2026-05-14 00:32:49 +08:00
demo refactor(queue): 统一初始化接口并添加 resize 功能 2026-05-15 01:40:59 +08:00
doc docs: 更新架构图与 API 文档,补充 segarray 设计笔记 2026-05-16 01:57:07 +08:00
include refactor(segarray): 段使用rawbuf而不是darray,先按照最简单的方式调试通push和pop等操作 2026-05-15 19:01:37 +08:00
perf refactor(queue): 统一初始化接口并添加 resize 功能 2026-05-15 01:40:59 +08:00
src refactor(segarray): 段使用rawbuf而不是darray,先按照最简单的方式调试通push和pop等操作 2026-05-15 19:01:37 +08:00
test refactor(segarray): 段使用rawbuf而不是darray,先按照最简单的方式调试通push和pop等操作 2026-05-15 19:01:37 +08:00
.gitignore refactor(segarray): 段使用rawbuf而不是darray,先按照最简单的方式调试通push和pop等操作 2026-05-15 19:01:37 +08:00
CMakeLists.txt perf性能测试代码实现,但测试代码写起来怪怪的,日志打印的信息也不直观。后续再调整吧 2026-05-12 23:38:49 +08:00
LICENSE Initial commit 2024-06-17 15:03:15 +00:00
mk Linux平台编译也通过 2026-02-13 18:36:03 +08:00
mk.bat unity多文件单元测试的编写思考,可能无法做大打印的信息直接定位到特定文件。只显示BEGIN的文件。 2024-08-28 00:15:21 +08:00
README.md docs: 更新架构图与 API 文档,补充 segarray 设计笔记 2026-05-16 01:57:07 +08:00
run.bat perf性能测试代码实现,但测试代码写起来怪怪的,日志打印的信息也不直观。后续再调整吧 2026-05-12 23:38:49 +08:00

unicstl

简介

基于C语言实现的通用C库包含常用数据结构和算法。

全称: Universal C standard library

作者: 温建峰

主页: 博客

邮箱:orig5826@163.com

gitee源码

github镜像

设计架构

classDiagram
direction TB

namespace dynamic_array {
    class ringbuf{
        小数据
        少扩容
    }
    class rawbuf
    class darray
    class linklist{
        <<单链表>>
    }
    class dlinklist{
        <<双向链表>>
    }
}

namespace embed {
    class estack
    class equeue
}

namespace iter {
    class iterator{
        + hasnext()
        + next() 
    }
}

namespace hal {
    class segarray{
        大数据
        优先扩容
    }
    class string
    class hashtable
}

namespace adapter {
    class deque
}

namespace top {
    class stack
    class queue
    class rbtree
    class map
    class unordered_map
}


%% ========== 以下全部按你真实逻辑修正 ==========

%% segarray 包含 ringbuf同生共死
segarray *-- ringbuf : 组合
segarray *-- rawbuf : 组合

%% string / hashtable 底层使用darray
string *-- darray : 组合
hashtable *-- darray : 组合

%% deque 当前ringbuf可换segarray
deque *-- ringbuf : 组合
deque *-- segarray : 组合

%% stack/queue 持有deque*,管理生命周期
stack *-- deque : 组合
queue *-- deque : 组合

%% 临时使用 → 依赖
rbtree ..> stack : 依赖
rbtree ..> queue : 依赖

%% map/unordered_map 底层使用 rbtree/hashtable
map *-- rbtree : 组合
unordered_map *-- hashtable : 组合

%% embed 是内联函数,仅调用 → 依赖
estack ..> ringbuf : 依赖
equeue ..> ringbuf : 依赖

数据结构

底层基础容器

原生裸数据结构

数据结构 名称 说明
darray 动态数组 扩容
ringbuf 环形缓存区 扩容/外部缓存
linklist 单链表
dlinklist 双向链表
rawbuf 原始缓冲区 动态分配固定容量/外部缓存
segarray 分段数组 扩容

使用建议

  • ringbuf 小数据,少库容
  • segarray 大数据,优先扩容

通用标准容器

基于底层封装

数据结构 名称 说明
deque 双端队列 扩容
stack 扩容
queue 队列 扩容

嵌入式专用容器

适配嵌入式场景、外置内存、无动态堆分配

数据结构 名称 说明
estack 外部缓存
equeue 队列 外部缓存

接口函数原型

// -------------------- 初始化 --------------------
struct* new(size_t obj_size, size_t capacity);  // 创建
void free(struct**);                            // 释放

bool init(size_t obj_size, size_t capacity, void *mem_base);    // 静态初始化,支持传入外部缓存

// 外部实现
int compare(void* obj1, void* obj2);    // 比较函数,若调用了和比较有关的接口,需要在初始化后配置(树、图必须)

// -------------------- 核心功能 --------------------
// 核心操作
bool push(const void* obj);             // [栈、队列] 入栈/入队
bool push_front(const void* obj);       // [双端队列] 头部入队
bool push_back(const void* obj);        // [双端队列] 尾部入队
bool append(const void* obj);           // [动态数组] 追加元素 <push_back>

bool pop(void* obj);                    // [栈、队列,动态数组] 出栈/出队/移除元素
bool pop_front(void* obj);              // [双端队列] 头部出队
bool pop_back(void* obj);               // [双端队列] 尾部出队

bool peek(void* obj);                   // [栈]            查看栈顶元素
bool front(void* obj);                  // [队列、双端队列] 查看头部元素
bool back(void* obj);                   // [队列、双端队列] 查看尾部元素

// 基础操作
size_t size();                          // 获取大小
size_t capacity();                      // 获取容量
bool empty();                           // 判断是否空
bool full();                            // 判断是否满
void clear();                           // 清空

// 迭代器操作
iterator_t iter(...);                   // 返回迭代器
bool iter_hasnext();                    // 是否有下一个元素
const void* iter_next();                // 迭代器下一个元素 <只读访问>

// 索引操作
size_t index(void *obj);                // 获取元素索引, -1为不存在

bool insert(size_t index, const void* obj);     // 插入元素
bool remove(size_t index, const void *obj);     // 删除元素 < delete !!!废弃防止项目用于C++,关键字冲突>

// 随机访问
bool set(uint32_t index, const void* obj);      // 设置元素
bool get(uint32_t index, void* obj);            // 获取元素
const void* at(size_t index);                   // 获取元素指针

// 排序 & 搜索
bool sort();                                // 排序
bool search(const void* obj);               // 搜索元素 <返回索引,-1为不存在>

// 统计
uint32_t count(const void* obj);        // 统计元素的个数
bool contains(const void* obj);         // 判断元素是否存在 <返回bool>

// 树
bool insert(const void* obj);       // [树] 插入元素
bool delete(const void* obj);       // [树] 删除元素
bool add_(const void* obj);         // [图:顶点、边] 添加元素 <add不考虑位置关系>
bool del_(const void* obj);         // [图:顶点、边] 删除元素 
bool find_(const void* obj);        // [图:顶点、边] 查找元素

分支命名

分支 作用 示例
master 稳定主分支 master
dev 开发主分支 dev-stack
test 功能测试 test-tree
release 版本发布 v1.2.5
--- --- ---
feature 新增独立功能 feature-tree
bugfix 问题修复 bugfix-map
refactor 架构重构 refactor-darray

基础命名规则

  • 简易单层命名:分支[-模块]
    • 示例:dev-stacktest-treerefactor
  • 多层细分命名:模块/分支[-功能]
    • 示例:stack/dev-push rbtree/test-insert v0.0.02/refactor

修改日志

Unicstl 0.0.10 (2026-5-11)

  • new features

    • add darray/ringbuf/linlist/dlinklist
    • add estack/equeue for embedded
    • darray add function: search/sort
    • add algo: sort and search
    • add rawbuf/segarray
  • refactor:

    • deque base on ringbuf
    • stack base on deque
    • queue base on deque

Unicstl 0.0.02 (2025-05-06)

  • new features
    • graph add function: add/del/find vertex/edge
    • graph add function: bfs/dfs
    • tree add new iterator and optimize code
    • deque add order select and delete some functions
    • iter change the name of container/index...
    • list optimize code and add slice function
    • unicstl add default function

Unicstl 0.0.01 (2025-04-24)

  • new features
    • add stack
    • add queue
    • add deque
    • add list
    • add heap
    • add tree
    • add graph
    • add iterator