轻量级 C++ 模板数据结构与算法库。
MiniSTL/
├── General/ # 线性表
│ ├── Array.hpp # 动态数组
│ └── LinkList.hpp # 单链表
├── Stack/ # 栈
│ ├── Array_Stack.hpp # 顺序栈
│ └── LinkList_Stack.hpp # 链式栈
├── Queue/ # 队列
│ ├── Array_Queue.hpp # 循环顺序队列
│ └── LinkList_Queue.hpp # 链式队列
├── Deque/ # 双端队列
│ ├── ArrayDequeue.hpp # 顺序双端队列
│ └── deque.hpp # 链式双端队列
├── Heap/ # 堆与优先队列
│ └── PriorityQueue.hpp # 最大堆优先队列
├── HashMap/ # 哈希映射
│ └── HashMap.hpp # 拉链法哈希映射
├── HashSet/ # 哈希集合
│ └── HashSet.hpp # 拉链法哈希集合
├── Tree/ # 树形结构
│ ├── Tree.hpp # 顺序存储二叉树
│ ├── Binary_Search_Tree.hpp # 二叉搜索树 (BST)
│ └── AVL_Tree.hpp # 自平衡二叉搜索树 (AVL Tree)
├── Graph/ # 图结构
│ └── Graph.hpp # 邻接表图(支持有向/无向、权值、BFS、DFS)
├── algorithm/ # 经典算法
│ ├── binarySearch.cpp # 二分查找(迭代/递归)
│ ├── mergeSort.cpp # 归并排序
│ ├── quickSort.cpp # 快速排序
│ ├── heapSort.cpp # 堆排序
│ ├── shellSort.cpp # 希尔排序(缩小增量)
│ ├── bubbleSort.cpp # 冒泡排序
│ ├── insertionSort.cpp # 插入排序
│ ├── selectionSort.cpp # 选择排序
│ ├── kmp.cpp # KMP 字符串模式匹配
│ ├── dijkstra.cpp # Dijkstra 单源最短路径
│ ├── topologicalSort.cpp # 拓扑排序(Kahn 算法/DAG 判环)
│ ├── knapsack.cpp # 0-1 背包与完全背包(动态规划)
│ └── lcs.cpp # 最长公共子序列 (LCS) 与最长递增子序列 (LIS)
├── Exception/ # 异常处理
│ └── OutOfIndexException.h # 越界异常
└── Log/ # 日志工具
├── Log.h
└── Log.cpp
Array是用一段物理地址连续的存储单元依次存储数据元素的线性结构,采用数组存储,支持动态扩容、随机访问、首尾插入和删除。
详细参考文档页: Array
Lists将元素按顺序储存在链表中,支持快速的在任意位置插入与删除节点。
详细参考文档页: LinkList
遵循 LIFO(后进先出)原则的受限线性表。
Array_Stack: 基于动态数组实现的顺序栈。LinkList_Stack: 基于链表实现的链式栈。
遵循 FIFO(先进先出)原则的受限线性表。
Array_Queue: 基于循环数组实现的环形顺序队列,提供满/空检查及队首尾访问。LinkList_Queue: 基于链表实现的链式队列。
允许在两端进行插入和删除操作的线性表。
ArrayDequeue: 顺序表实现的循环双端队列。deque: 链表实现的双端队列。
详细参考文档页: ArrayDequeue
基于数组和完全二叉树实现的最大二叉堆,支持
push(上浮)、pop(取最大值并下沉)、top等操作,自动动态扩容。
基于**链地址法(拉链法)**实现的键值对映射容器,平均增删查改复杂度为
$O(1)$ 。
- 支持
put(key, val),get(key),remove(key),containsKey(key)。
基于链地址法实现的唯一元素集合,自动过滤重复元素。
- 支持
add(val),remove(val),contains(val),print()。
Tree: 顺序数组存储的二叉树,提供父子关系索引计算及层序、先序遍历。BinarySearchTree: 二叉搜索树(BST),支持节点插入、查找最小/最大、先序/中序遍历和节点删除。AVLTree: 自平衡二叉搜索树(AVL),通过左旋、右旋保持严格平衡。
基于邻接表实现的图结构,支持有向图与无向图、加权边。
- 支持顶点添加、边增删、邻接表可视化。
- 提供 DFS(深度优先遍历) 和 BFS(广度优先遍历) 算法。
-
quickSort: 快速排序(基准分区双指针法,平均$O(n \log n)$ )。 -
mergeSort: 归并排序(分治合并法,$O(n \log n)$ 稳定排序)。 -
heapSort: 堆排序(原地建最大堆与下沉调整,$O(n \log n)$ 原地排序)。 -
shellSort: 希尔排序(缩小增量插入排序,平均优于$O(n^2)$ )。 -
bubbleSort: 冒泡排序(带提前终止标志优化)。 -
insertionSort: 直接插入排序。 -
selectionSort: 选择排序。
-
kmp: KMP 模式匹配算法(计算 Next 数组,避免主串指针回溯,复杂度$O(n + m)$ )。 -
dijkstra: Dijkstra 单源最短路径算法(基于贪心松弛,支持回溯打印完整路径)。 -
topologicalSort: 拓扑排序算法(基于入度消除的 Kahn 算法,兼具 DAG 判环功能)。
knapsack: 背包问题(包含 0-1 背包的一维滚动数组优化、二维回溯选择方案,以及完全背包算法)。lcs: 最长公共子序列(LCS,含长度计算与具体子序列重构)与最长递增子序列(LIS)。