Skip to content
richuffPublic

About

My miniATL Implement using c++

Resources

Stars

3 stars

Watchers

2 watching

Forks

Latest commit

 

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiNiSTL

轻量级 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

1. Array (动态数组)

Array是用一段物理地址连续的存储单元依次存储数据元素的线性结构,采用数组存储,支持动态扩容、随机访问、首尾插入和删除。

详细参考文档页: Array

2. LinkList (单链表)

Lists将元素按顺序储存在链表中,支持快速的在任意位置插入与删除节点。

详细参考文档页: LinkList

3. Stack (栈)

遵循 LIFO(后进先出)原则的受限线性表。

  • Array_Stack: 基于动态数组实现的顺序栈。
  • LinkList_Stack: 基于链表实现的链式栈。

4. Queue (队列)

遵循 FIFO(先进先出)原则的受限线性表。

  • Array_Queue: 基于循环数组实现的环形顺序队列,提供满/空检查及队首尾访问。
  • LinkList_Queue: 基于链表实现的链式队列。

5. Deque (双端队列)

允许在两端进行插入和删除操作的线性表。

  • ArrayDequeue: 顺序表实现的循环双端队列。
  • deque: 链表实现的双端队列。

详细参考文档页: ArrayDequeue

6. PriorityQueue (优先队列 / 最大堆)

基于数组和完全二叉树实现的最大二叉堆,支持 push(上浮)、pop(取最大值并下沉)、top 等操作,自动动态扩容。

7. HashMap (哈希映射)

基于**链地址法(拉链法)**实现的键值对映射容器,平均增删查改复杂度为 $O(1)$。

  • 支持 put(key, val), get(key), remove(key), containsKey(key)。

8. HashSet (哈希集合)

基于链地址法实现的唯一元素集合,自动过滤重复元素。

  • 支持 add(val), remove(val), contains(val), print()。

9. Tree (树形结构)

  • Tree: 顺序数组存储的二叉树,提供父子关系索引计算及层序、先序遍历。
  • BinarySearchTree: 二叉搜索树(BST),支持节点插入、查找最小/最大、先序/中序遍历和节点删除。
  • AVLTree: 自平衡二叉搜索树(AVL),通过左旋、右旋保持严格平衡。

10. Graph (图)

基于邻接表实现的图结构,支持有向图与无向图、加权边。

  • 支持顶点添加、边增删、邻接表可视化。
  • 提供 DFS(深度优先遍历) 和 BFS(广度优先遍历) 算法。

11. 经典算法库

11.1 排序算法

  • quickSort: 快速排序(基准分区双指针法,平均 $O(n \log n)$)。
  • mergeSort: 归并排序(分治合并法,$O(n \log n)$ 稳定排序)。
  • heapSort: 堆排序(原地建最大堆与下沉调整,$O(n \log n)$ 原地排序)。
  • shellSort: 希尔排序(缩小增量插入排序,平均优于 $O(n^2)$)。
  • bubbleSort: 冒泡排序(带提前终止标志优化)。
  • insertionSort: 直接插入排序。
  • selectionSort: 选择排序。

11.2 字符串与图算法

  • kmp: KMP 模式匹配算法(计算 Next 数组,避免主串指针回溯,复杂度 $O(n + m)$)。
  • dijkstra: Dijkstra 单源最短路径算法(基于贪心松弛,支持回溯打印完整路径)。
  • topologicalSort: 拓扑排序算法(基于入度消除的 Kahn 算法,兼具 DAG 判环功能)。

11.3 动态规划算法

  • knapsack: 背包问题(包含 0-1 背包的一维滚动数组优化、二维回溯选择方案,以及完全背包算法)。
  • lcs: 最长公共子序列(LCS,含长度计算与具体子序列重构)与最长递增子序列(LIS)。

About

My miniATL Implement using c++

Resources

Stars

3 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages