全称: Universal C standard library 基于C语言实现的通用C库。包含常用数据结构和算法
Go to file
2025-04-26 15:01:15 +08:00
.vscode 修改迭代器,后续将迭代器接口统一 2025-04-24 10:15:09 +08:00
3rdparty unity同步到当前最新版本 2025-04-22 15:15:47 +08:00
demo 修改枚举类型,命名更加简洁 2025-04-25 01:47:58 +08:00
doc rbt测试通过 2024-09-02 21:14:16 +08:00
include bfs的遍历还存在问题 2025-04-26 15:01:15 +08:00
src bfs的遍历还存在问题 2025-04-26 15:01:15 +08:00
test bfs的遍历还存在问题 2025-04-26 15:01:15 +08:00
.gitignore 为了方便在vscode上快速debug,顺便把vscode的配置也上传了 2024-06-22 17:43:15 +08:00
CMakelists.txt 暂时用不到的函数就先屏蔽了 2025-04-25 01:30:37 +08:00
LICENSE Initial commit 2024-06-17 15:03:15 +00:00
mk.bat unity多文件单元测试的编写思考,可能无法做大打印的信息直接定位到特定文件。只显示BEGIN的文件。 2024-08-28 00:15:21 +08:00
README.md 【性能比较】添加常用数据结构时间复杂度和空间复杂度小结表 2025-04-25 10:29:49 +08:00
run.bat list单测及代码结构调整 2024-08-30 01:45:15 +08:00

unicstl

简介

全称: Universal C standard library

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

标准:--std=c99

数据结构详细说明

数据结构

数据结构 原理 说明
stack
stack_new 链表
stack_new2 动态数组
list 列表
list_new2 动态数组
queue 队列
queue_new 单向链表
queue_new2 数组 FIFO/空/满
deque 双端队列
deque_new 双向循环链表
tree
tree_avl_new 二叉搜索树 AVL树
tree_rb_new 二叉搜索树 红黑树
heap
heap_new2 数组 最大堆/最小堆

特点

原理 说明
链表 有额外指针开销
动态数组 扩容时数据搬移代价较大

性能比较

数据结构 < > <空间复杂度>
--- ( ) ( ) 最坏
--- 访问 搜索 插入 删除 访问 搜索 插入 删除 ---
数组 O(1) O(n) O(n) O(n) O(1) O(n) O(n) O(n) O(n)
O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
队列 O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
单向链表 O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
双向链表 O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
跳表 O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n) O(n) O(n) O(n) O(n*log(n))
哈希表 N/A O(1) O(1) O(1) N/A O(n) O(n) O(n) O(n)
二叉搜索树 O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n) O(n) O(n) O(n) O(n)
AVL树 O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n)
红黑树 O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n)
B树 O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n)

【答疑】 若链表的操作流程为,先查找元素再删除元素。那么时间复杂度确实是$O(n)$。但是链表的增删优势,在其他应用有体现。比如双向队列,插入和删除效率都为$O(1)$。

规范

版本说明

命名 版本说明 范围 更新说明
VERSION_MAJOR 主版本号 0 ~ 99 代码框架大改,完全不兼容旧版
VERSION_MINOR 次版本号 0 ~ 99 代码框架尽量兼容旧版增信大功能、修复重大bug等
VERSION_MICRO 小版本号 0 ~ 99 代码框架兼容旧版新增小功能、修复bug等

举例说明:

// 若 major > 0 ,则代表正式发布版本
#define UNICSTL_VERSION_MAJOR    1
#define UNICSTL_VERSION_MINOR    2
#define UNICSTL_VERSION_MICRO    5
#define UNICSTL_VERSION          ((UNICSTL_VERSION_MAJOR << 16) | (UNICSTL_VERSION_MINOR << 8) | UNICSTL_VERSION_MICRO)

工程命名

工程名(_功能)_v版本号_日期(_时间)(-其他信息)

括号内表示可选项

其他信息后缀 说明 详细
aX alpha内测版 可能仅测试了新增功能,但没有测试新增功能对其他模块的影响
bX beta公测版 不仅测试了新增功能,也测试了其他模块,尽量保证新增的功能不影响原来的旧功能。
... 或者添加其他有有效信息

举例说明:

unicstl_stack_v1.2.5_20240717-a0.zip

# 带a或者b后缀表示当前版本发布前的测试版。如果发布后则直接更新版本号了

修改日志

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
  • bugfixed:
    • none
  • others:
    • none