Skip to content

jelasin/LibCSTL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C STL库

打算重写以前学习数据结构时写的代码,原版代码的扩展性并不好,实用性也不强。参考Linux内核的一些优秀数据结构和算法设计了C STL库,里面包含了一些扩展性和移植性较好的数据结构和算法,相较于原版代码,去除了不实用的功能,精简代码,最大程度还原数据结构本质功能, 扩展性强。相较于内核,没有大量使用static inline, 增加了更多的错误处理。

使用方式

目录之间相互独立,依赖文件在同目录下,直接复制粘贴对应目录下所有的.h.c文件即可。

目录结构

example.c
xxx.h
xxx.c
  • example.c:示例代码
  • xxx.h:头文件
  • xxx.c:实现文件

development

底层数据结构

值容器资源释放全由容器完。侵入式容器除了销毁,单一删除摘取资源由用户负责释放。

  • 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 三个级别日志打印。

About

C STL

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages