打算重写以前学习数据结构时写的代码,原版代码的扩展性并不好,实用性也不强。参考Linux内核
的一些优秀数据结构和算法设计了C STL
库,里面包含了一些扩展性和移植性较好的数据结构和算法,相较于原版代码,去除了不实用的功能,精简代码,最大程度还原数据结构本质功能, 扩展性强。相较于内核,没有大量使用static inline, 增加了更多的错误处理。
目录之间相互独立,依赖文件在同目录下,直接复制粘贴对应目录下所有的.h
和.c
文件即可。
example.c
xxx.h
xxx.c
example.c
:示例代码xxx.h
:头文件xxx.c
:实现文件
值容器资源释放全由容器完。侵入式容器除了销毁,单一删除摘取资源由用户负责释放。
- list : 双向链表.
- hlist : 哈希链表.
- lru_list : lru 链表, 依赖于 hlist 和 list.
- splay_tree : 伸展树, 支持自定义析构函数, 只有在销毁时才调用析构函数, avl_erase 不负责析构,由用户自行决断何时释放资源.
- avl_tree : 平衡二叉树, 支持自定义析构函数, 只有在销毁时才调用析构函数, avl_erase 不负责析构,由用户自行决断何时释放资源.
- rb_tree : 红黑树, 支持自定义析构函数, 只有在销毁时才调用析构函数, rb_erase 不负责析构,由用户自行决断何时释放资源.
- b_tree : B树, 支持自定义析构函数, 销毁和删除资源释放都会调用析构函数, 资源释放由容器完成.
- radix_tree : 基数树, 支持自定义析构函数, 只有在销毁时才调用析构函数, radix_erase 不负责析构,由用户自行决断何时释放资源.
- list : 双向链表, 同底层数据结构 list.
- hlist : 哈希链表, 同底层数据结构 hlist.
- queue : 单调队列, 需要依赖 list.
- deque : 双端队列, 需要依赖 list.
- stack : 单调栈, 需要依赖 list.
- priority_queue : 优先队列, 基于二叉堆数组, 支持自定义析构函数, 实现仅在销毁时调用析构函数, 出队不调用析构函数, 用户自主选择出队释放时机.
- ring_queue : 环形队列, 支持自定义析构函数, 仅在销毁时调用析构函数, 出队不调用析构函数, 用户自主选择出队释放时机.
- hashmap : 哈希表, 支持自定义析构函数, 需要依赖 rb_tree.
- sort : 智能排序算法.
-
- SORT_AUTO
-
- SORT_BUBBLE
-
- SORT_SELECTION
-
- SORT_INSERTION
-
- SORT_QUICK
-
- SORT_MERGE
-
- SORT_HEAP
- hash : 哈希算法库.
-
- APHash
-
- BKDRHash
-
- DJB2Hash
-
- ELFHash
-
- JSHash
-
- MD5
-
- PJWHash
-
- RSHash
-
- SDBMHash
-
- SimpleHash
- crypto : 加密算法库.
-
- AES
-
- DES
-
- DSA
-
- ECC
-
- RSA
-
- RC4
-
- ChaCha20
ErrLog, 支持 WARN, ERROR, INFO 三个级别日志打印。