# 数据结构(C++模板实现)
**Repository Path**: shenghuali/data-structures-cpp
## Basic Information
- **Project Name**: 数据结构(C++模板实现)
- **Description**: 通用的C++数据结构代码实现,使用模板。代码完整齐全,可直接运行,可生成doxygen文档,跨Windows/Linux/Mac平台兼容
- **Primary Language**: C++
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 126
- **Created**: 2023-11-11
- **Last Updated**: 2023-11-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 1 简介
- 通用于各类**数据结构与算法(C++语言)教材**,适用于**自学**、**课程设计/毕业设计**和**考研复习**等
- 完整的**代码实现**,可**直接运行调试**,使用**模板**,方便灵活
- 代码**注释完整**,可生成网页版/PDF文档,效果丰富
- CyberDash团队持续化的维护, **抖音二维码**如下, 您的关注点赞收藏是对我们的鼓励和鞭策!
# 2 使用教程
[点击跳转至简易教程](/Tutorial.md)
# 3 内容
## 线性表
| 编号 | 结构 | 操作 |
|-----------------|-------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | [顺序表](/LinearList/src/seq_list.h#L35) | [默认构造函数 ](/LinearList/src/seq_list.h#L41) [构造函数 ](/LinearList/src/seq_list.h#L110) [复制构造函数 ](/LinearList/src/seq_list.h#L151) [析构函数 ](/LinearList/src/seq_list.h#L50) [插入 ](/LinearList/src/seq_list.h#L395) [删除 ](/LinearList/src/seq_list.h#L453) [获取结点数据 ](/LinearList/src/seq_list.h#L304) [设置结点数据 ](/LinearList/src/seq_list.h#L346) [容量 ](/LinearList/src/seq_list.h#L56) [长度 ](/LinearList/src/seq_list.h#L59) [搜索(查找) ](/LinearList/src/seq_list.h#L268) [是否空表 ](/LinearList/src/seq_list.h#L501) [是否容量满 ](/LinearList/src/seq_list.h#L528) [排序 ](/LinearList/src/seq_list.h#L643) [打印 ](/LinearList/src/seq_list.h#L611) |
| 2 | [单链表](/LinearList/src/singly_linked_list.h#L58) | [默认构造函数 ](/LinearList/src/singly_linked_list.h#L118) [复制构造函数 ](/LinearList/src/singly_linked_list.h#L157) [析构函数 ](/LinearList/src/singly_linked_list.h#L204) [插入(结点指针) ](/LinearList/src/singly_linked_list.h#L513) [插入(结点数据) ](/LinearList/src/singly_linked_list.h#L441) [删除 ](/LinearList/src/singly_linked_list.h#L706) [获取结点数据 ](/LinearList/src/singly_linked_list.h#L239) [设置结点数据 ](/LinearList/src/singly_linked_list.h#L288) [长度 ](/LinearList/src/singly_linked_list.h#L69) [搜索 ](/LinearList/src/singly_linked_list.h#L606) [是否空链表 ](/LinearList/src/singly_linked_list.h#L87) [打印 ](/LinearList/src/singly_linked_list.h#L379) |
| 3 | [双向链表](/LinearList/src/doubly_linked_list.h#L61) | [默认构造函数 ](/LinearList/src/doubly_linked_list.h#L142) [析构函数 ](LinearList/src/doubly_linked_list.h#L183) [插入(结点数据) ](LinearList/src/doubly_linked_list.h#L324) [删除结点 ](LinearList/src/doubly_linked_list.h#L545) [获取结点数据 ](LinearList/src/doubly_linked_list.h#L432) [设置结点数据 ](LinearList/src/doubly_linked_list.h#L485) [长度 ](LinearList/src/doubly_linked_list.h#L103) [搜索 ](LinearList/src/doubly_linked_list.h#L208) [是否空链表 ](LinearList/src/doubly_linked_list.h#L73) [打印 ](LinearList/src/doubly_linked_list.h#L630) |
| 4 | [循环单链表](/LinearList/src/circular_singly_linked_list.h#L60) | [默认构造函数 ](/LinearList/src/circular_singly_linked_list.h#L63) [析构函数 ](/LinearList/src/circular_singly_linked_list.h#L214) [长度 ](/LinearList/src/circular_singly_linked_list.h#L69) [链表是否为空 ](/LinearList/src/circular_singly_linked_list.h#L72) [清空 ](/LinearList/src/circular_singly_linked_list.h#L133) [搜索 ](/LinearList/src/circular_singly_linked_list.h#L184) [获取结点 ](/LinearList/src/circular_singly_linked_list.h#L249) [插入结点 ](/LinearList/src/circular_singly_linked_list.h#L322) [删除结点 ](/LinearList/src/circular_singly_linked_list.h#L427) [获取结点数据 ](/LinearList/src/circular_singly_linked_list.h#L572) [设置结点数据 ](/LinearList/src/circular_singly_linked_list.h#L625) [打印 ](/LinearList/src/circular_singly_linked_list.h#L517) |
| 5 | [循环双向链表](/LinearList/src/circular_doubly_linked_list.h#L61) | [默认构造函数 ](/LinearList/src/circular_doubly_linked_list.h#L64) [析构函数 ](/LinearList/src/circular_doubly_linked_list.h#L176) [长度 ](/LinearList/src/circular_doubly_linked_list.h#L70) [判断是否为空链表 ](/LinearList/src/circular_doubly_linked_list.h#L73) [清空 ](/LinearList/src/circular_doubly_linked_list.h#L143) [获取链表首结点 ](/LinearList/src/circular_doubly_linked_list.h#L79) [搜索 ](/LinearList/src/circular_doubly_linked_list.h#L201) [获取结点(按方向) ](/LinearList/src/circular_doubly_linked_list.h#L247) [获取结点 ](/LinearList/src/circular_doubly_linked_list.h#L88) [插入结点 ](/LinearList/src/circular_doubly_linked_list.h#L357) [删除结点(按方向) ](/LinearList/src/circular_doubly_linked_list.h#L459) [删除结点 ](/LinearList/src/circular_doubly_linked_list.h#L535) [获取结点数据 ](/LinearList/src/circular_doubly_linked_list.h#L576) [设置结点数据 ](/LinearList/src/circular_doubly_linked_list.h#L637) [打印 ](/LinearList/src/circular_doubly_linked_list.h#L690) |
| 6 | [静态链表](/LinearList/src/static_linked_list.h#L64) | [构造函数 ](/LinearList/src/static_linked_list.h#L145) [插入结点(数据项) ](/LinearList/src/static_linked_list.h#L337) [删除结点 ](/LinearList/src/static_linked_list.h#L418) [获取结点数据 ](/LinearList/src/static_linked_list.h#L145) [长度 ](/LinearList/src/static_linked_list.h#L73) [搜索 ](/LinearList/src/static_linked_list.h#L266) [是否空链表 ](/LinearList/src/static_linked_list.h#L85) [打印 ](/LinearList/src/static_linked_list.h#L477) |
| 7 | [算法](/LinearList/src/seq_list_algorithm.h#1) | [顺序表求并集 ](/LinearList/src/seq_list_algorithm.h#L27) [顺序表求交集 ](/LinearList/src/seq_list_algorithm.h#L54) |
## 栈与队列
| 编号 | 结构 | 操作 |
|-----------------|----------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | [顺序栈](/Stack/src/seq_stack.h#L37) | [构造函数 ](/Stack/src/seq_stack.h#L54) [析构函数 ](/Stack/src/seq_stack.h#L105) [入栈 ](/Stack/src/seq_stack.h#L134) [出栈 ](/Stack/src/seq_stack.h#L219) [出栈(保存数据) ](/Stack/src/seq_stack.h#L177) [获取栈顶数据 ](/Stack/src/seq_stack.h#L253) [判断是否为空栈 ](/Stack/src/seq_stack.h#L287) [判断是否为满栈 ](/Stack/src/seq_stack.h#L308) [获取当前栈长度 ](/Stack/src/seq_stack.h#L329) [重载<< ](/Stack/src/seq_stack.h#L393) |
| 2 | [链式栈](/Stack/src/linked_stack.h#L79) | [默认构造函数 ](/Stack/src/linked_stack.h#L91) [析构函数 ](/Stack/src/linked_stack.h#L135) [入栈 ](/Stack/src/linked_stack.h#L164) [出栈 ](/Stack/src/linked_stack.h#L260) [出栈(保存数据) ](/Stack/src/linked_stack.h#L211) [获取栈顶数据 ](/Stack/src/linked_stack.h#L304) [判断是否为空栈 ](/Stack/src/linked_stack.h#L373) [获取当前栈长度 ](/Stack/src/linked_stack.h#L343) [重载<< ](/Stack/src/linked_stack.h#L434) |
| 3 | [循环队列](/Queue/src/circular_queue.h#L26) | [构造函数 ](/Queue/src/circular_queue.h#L48) [析构函数 ](/Queue/src/circular_queue.h#L66) [入队 ](/Queue/src/circular_queue.h#L133) [出队 ](/Queue/src/circular_queue.h#L238) [出队(保存数据) ](/Queue/src/circular_queue.h#L186) [获取队头数据 ](/Queue/src/circular_queue.h#L284) [获取队尾数据 ](/Queue/src/circular_queue.h#L325) [判断是否为空队 ](/Queue/src/circular_queue.h#L359) [判断是否为满队 ](/Queue/src/circular_queue.h#L380) [长度 ](/Queue/src/circular_queue.h#L405) [清空 ](/Queue/src/circular_queue.h#L434) [重载<< ](/Queue/src/circular_queue.h#L462) |
| 4 | [链式队列](/Queue/src/linked_queue.h#L82) | [默认构造函数 ](/Queue/src/linked_queue.h#L86) [析构函数 ](/Queue/src/linked_queue.h#L101) [入队 ](/Queue/src/linked_queue.h#L195) [出队 ](/Queue/src/linked_queue.h#L299) [出队(保存数据) ](/Queue/src/linked_queue.h#L248) [获取队头数据 ](/Queue/src/linked_queue.h#L345) [获取队尾数据 ](/Queue/src/linked_queue.h#L386) [判断是否为空队 ](/Queue/src/linked_queue.h#L420) [长度 ](/Queue/src/linked_queue.h#L444) [清空 ](/Queue/src/linked_queue.h#L473) [重载<< ](/Queue/src/linked_queue.h#L501) |
| 5 | [双端队列](/Queue/src/double_ended_queue.h#L30) | [构造函数 ](/Queue/src/double_ended_queue.h#L50) [析构函数 ](/Queue/src/double_ended_queue.h#L70) [队尾入队 ](/Queue/src/double_ended_queue.h#L143) [队头入队 ](/Queue/src/double_ended_queue.h#L195) [队头出队 ](/Queue/src/double_ended_queue.h#L299) [队头出队(保存数据) ](/Queue/src/double_ended_queue.h#L248) [队尾出队 ](/Queue/src/double_ended_queue.h#L400) [队尾出队(保存数据) ](/Queue/src/double_ended_queue.h#L349) [获取队头数据 ](/Queue/src/double_ended_queue.h#L446) [获取队尾数据 ](/Queue/src/double_ended_queue.h#L487) [判断是否为空队 ](/Queue/src/double_ended_queue.h#L521) [判断是否为满队 ](/Queue/src/double_ended_queue.h#L542) [长度 ](/Queue/src/double_ended_queue.h#L566) [清空 ](/Queue/src/double_ended_queue.h#L594) [重载<< ](/Queue/src/double_ended_queue.h#L622) |
## 数组和广义表
| 编号 | 结构 | 操作 |
|-----------------|----------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | [稀疏矩阵](/Array/src/sparse_matrix.h#L80) | [转置 ](/Array/src/sparse_matrix.h#L514) [快速转置 ](/Array/src/sparse_matrix.h#L629) |
| 2 | [广义表](/GeneralizedList/src/simple_gen_list.h#L98) | [建表 ](/GeneralizedList/src/simple_gen_list.cpp#L93) [长度 ](/GeneralizedList/src/simple_gen_list.cpp#L373) [深度 ](/GeneralizedList/src/simple_gen_list.cpp#L313) [序列化 ](/GeneralizedList/src/simple_gen_list.cpp#L213) |
## 字符串
| 编号 | 结构 | 操作 |
|----|---------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | [字符串](/String/src/cyber_dash_string.h#L32) | [BF算法 ](/String/src/cyber_dash_string.h#L542) [KMP算法 ](/String/src/cyber_dash_string.h#L811) [KMP求next数组 ](/String/src/cyber_dash_string.h#L729) |
## 树
| 编号 | 结构 | 操作 |
|----|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | [二叉树](/Tree/BinaryTree/src/binary_tree.h#L92) | [默认构造函数 ](/Tree/BinaryTree/src/binary_tree.h#L95) [构造函数 ](/Tree/BinaryTree/src/binary_tree.h#L110) [复制构造函数 ](/Tree/BinaryTree/src/binary_tree.h#L459) [析构函数 ](/Tree/BinaryTree/src/binary_tree.h#L132) [获取根结点 ](/Tree/BinaryTree/src/binary_tree.h#L135) [是否为空树 ](/Tree/BinaryTree/src/binary_tree.h#L138) [获取父结点 ](/Tree/BinaryTree/src/binary_tree.h#L158) [高度 ](/Tree/BinaryTree/src/binary_tree.h#L175) [结点数 ](/Tree/BinaryTree/src/binary_tree.h#L191) [插入(递归) ](/Tree/BinaryTree/src/binary_tree.h#L208) [是否存在(数据) ](/Tree/BinaryTree/src/binary_tree.h#L225) [前序遍历(递归) ](/Tree/BinaryTree/src/binary_tree.h#L241) [前序遍历 ](/Tree/BinaryTree/src/binary_tree.h#L259) [中序遍历(递归) ](/Tree/BinaryTree/src/binary_tree.h#L277) [中序遍历 ](/Tree/BinaryTree/src/binary_tree.h#L295) [后序遍历(递归) ](/Tree/BinaryTree/src/binary_tree.h#L313) [后序遍历 ](/Tree/BinaryTree/src/binary_tree.h#L331) [层序遍历 ](/Tree/BinaryTree/src/binary_tree.h#L349) [建树(by前序遍历和中序遍历) ](/Tree/BinaryTree/src/binary_tree.h#L370) [打印 ](/Tree/BinaryTree/src/binary_tree.h#L388) [判断两棵树是否相同 ](/Tree/BinaryTree/src/binary_tree.h#L1404) |
| 2 | [中序线索树](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L26) | [创建线索 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L288) [获取第1个线索结点 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L117) [获取最后一个线索结点 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L191) [获取下一个线索结点 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L157) [获取前一个线索结点 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L232) [获取父结点 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L624) [中序遍历 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L258) [前序遍历 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L414) [后序遍历 ](/Tree/ThreadedTree/src/inorder_threaded_binary_tree.h#L469) |
| 3 | [子女兄弟树](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L56) | [使用带"()"的先根遍历字符串创建子女兄弟树 ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L84) [是否空树 ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L90) [结点数(递归) ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L105) [高度(递归) ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L121) [根结点 ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L127) [先根遍历 ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L143) [后根遍历 ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L159) [层序遍历 ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L175) [打印(递归) ](/Tree/ChildSiblingTree/src/child_sibling_tree.h#L190) |
| 4 | [Huffman树](/Tree/HuffmanTree/src/huffman_tree.h#L119) | [构造函数 ](/Tree/HuffmanTree/src/huffman_tree.h#L216) [析构函数 ](/Tree/HuffmanTree/src/huffman_tree.h#L138) [生成Huffman编码 ](/Tree/HuffmanTree/src/huffman_tree.h#L398) [打印 ](/Tree/HuffmanTree/src/huffman_tree.h#L160) |
| 5 | [堆](/Tree/Heap/src/min_heap.h#L27) | [构造函数1 ](/Tree/Heap/src/min_heap.h#L133) [构造函数2 ](/Tree/Heap/src/min_heap.h#L171) [析构函数 ](/Tree/Heap/src/min_heap.h#L31) [插入 ](/Tree/Heap/src/min_heap.h#L311) [堆顶出堆 ](/Tree/Heap/src/min_heap.h#L361) [获取堆顶 ](/Tree/Heap/src/min_heap.h#L410) [是否空堆 ](/Tree/Heap/src/min_heap.h#L54) [是否满堆 ](/Tree/Heap/src/min_heap.h#L70) [获取堆大小 ](/Tree/Heap/src/min_heap.h#L86) [清空堆 ](/Tree/Heap/src/min_heap.h#L101) |
| 6 | [最小优先队列](/Graph/src/min_priority_queue.h#L21) | [默认构造函数 ](/Graph/src/min_priority_queue.h#L32) [构造函数 ](/Graph/src/min_priority_queue.h#L47) [入队 ](/Graph/src/min_priority_queue.h#L64) [出队 ](/Graph/src/min_priority_queue.h#L81) [获取队头 ](/Graph/src/min_priority_queue.h#L98) [长度 ](/Graph/src/min_priority_queue.h#L114) [清空 ](/Graph/src/min_priority_queue.h#L129) |
## 图
| 编号 | 结构 | 操作 |
|----|-------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | [矩阵图](/Graph/src/matrix_graph.h#L37) | [构造函数1 ](/Graph/src/matrix_graph.h#L145) [构造函数2 ](/Graph/src/matrix_graph.h#L215) [构造函数3 ](/Graph/src/matrix_graph.h#L293) [构造函数4 ](/Graph/src/matrix_graph.h#L392) [析构函数 ](/Graph/src/matrix_graph.h#L464) [获取结点(by结点索引) ](/Graph/src/matrix_graph.h#L496) [获取边权值(by结点) ](/Graph/src/matrix_graph.h#L546) [获取边权值(by结点索引) ](/Graph/src/matrix_graph.h#L601) [插入结点 ](/Graph/src/matrix_graph.h#L797) [删除结点 ](/Graph/src/matrix_graph.h#L1057) [插入边 ](/Graph/src/matrix_graph.h#L893) [删除边 ](/Graph/src/matrix_graph.h#L1199) [获取第一个相邻结点 ](/Graph/src/matrix_graph.h#L660) [获取下一个相邻结点 ](/Graph/src/matrix_graph.h#L730) [获取结点索引 ](/Graph/src/matrix_graph.h#L1396) [重载<< ](/Graph/src/matrix_graph.h#L1334) [打印邻接矩阵 ](/Graph/src/matrix_graph.h#L1425) |
| 2 | [邻接表图](/Graph/src/adjacency_list_graph.h#L425) | [构造函数1 ](/Graph/src/adjacency_list_graph.h#L519) [构造函数2 ](/Graph/src/adjacency_list_graph.h#L568) [构造函数3 ](/Graph/src/adjacency_list_graph.h#L630) [构造函数4 ](/Graph/src/adjacency_list_graph.h#L720) [析构函数 ](/Graph/src/adjacency_list_graph.h#L786) [获取结点(by结点索引) ](/Graph/src/adjacency_list_graph.h#L820) [获取边权值(by结点) ](/Graph/src/adjacency_list_graph.h#L871) [获取边权值(by结点索引) ](/Graph/src/adjacency_list_graph.h#L936) [插入结点 ](/Graph/src/adjacency_list_graph.h#L997) [删除结点 ](/Graph/src/adjacency_list_graph.h#L1114) [插入边 ](/Graph/src/adjacency_list_graph.h#L1305) [删除边 ](/Graph/src/adjacency_list_graph.h#L1486) [获取第一个相邻结点 ](/Graph/src/adjacency_list_graph.h#L1618) [获取下一个相邻结点 ](/Graph/src/adjacency_list_graph.h#L1680) [获取结点索引 ](/Graph/src/adjacency_list_graph.h#L1850) [重载<< ](/Graph/src/adjacency_list_graph.h#L1781) |
| 3 | 算法 | [深度优先遍历(DFS) ](/Graph/src/graph_algorithm.cpp#L37) [广度优先遍历(BFS) ](/Graph/src/graph_algorithm.cpp#L262) [拓扑排序 ](/Graph/src/graph_algorithm.cpp#L136) [连通分量 ](/Graph/src/graph_algorithm.cpp#L340) [最小生成树Prim ](/Graph/src/graph_algorithm.cpp#L549) [最小生成树Kruskal ](/Graph/src/graph_algorithm.cpp#L432) [最短路径Dijkstra ](/Graph/src/graph_algorithm.cpp#L686) [最短路径BellmanFord ](/Graph/src/graph_algorithm.cpp#L843) [最短路径Floyd ](/Graph/src/graph_algorithm.cpp#L983) [关键路径 ](/Graph/src/graph_algorithm.cpp#L1306) |
## 搜索(查找)
| 编号 | 结构 | 操作 |
|----|------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | 线性表搜索 | [顺序搜索 ](/Search/DataList/src/search.h#L44) [折半搜索 ](/Search/DataList/src/search.h#L103) |
| 2 | [二叉搜索树](/Search/BinarySearchTree/src/binary_search_tree.h#L131) | [默认构造函数 ](/Search/BinarySearchTree/src/binary_search_tree.h#L143) [构造函数 ](/Search/BinarySearchTree/src/binary_search_tree.h#L157) [析构函数 ](/Search/BinarySearchTree/src/binary_search_tree.h#L169) [插入结点(调用递归) ](/Search/BinarySearchTree/src/binary_search_tree.h#L189) [删除结点(调用递归) ](/Search/BinarySearchTree/src/binary_search_tree.h#L206) [搜索(调用递归) ](/Search/BinarySearchTree/src/binary_search_tree.h#L223) [高度(调用递归) ](/Search/BinarySearchTree/src/binary_search_tree.h#L239) [获取最小结点的值 ](/Search/BinarySearchTree/src/binary_search_tree.h#L399) [获取最大结点的值 ](/Search/BinarySearchTree/src/binary_search_tree.h#L881) [获取根结点 ](/Search/BinarySearchTree/src/binary_search_tree.h#L250) [清空(调用递归) ](/Search/BinarySearchTree/src/binary_search_tree.h#L265) [打印(中序遍历) ](/Search/BinarySearchTree/src/binary_search_tree.h#L281) [重载= ](/Search/BinarySearchTree/src/binary_search_tree.h#L841) |
| 3 | [AVL树](/Search/BinarySearchTree/src/avl_tree.h#L218) | [默认构造函数 ](/Search/BinarySearchTree/src/avl_tree.h#L230) [插入结点 ](/Search/BinarySearchTree/src/avl_tree.h#L700) [插入节点(递归) ](/Search/BinarySearchTree/src/avl_tree.h#L724) [删除结点 ](/Search/BinarySearchTree/src/avl_tree.h#L1681) [删除结点(递归) ](/Search/BinarySearchTree/src/avl_tree.h#L747) [高度 ](/Search/BinarySearchTree/src/avl_tree.h#L129) [高度(调用递归) ](/Search/BinarySearchTree/src/avl_tree.h#L283) [最大值 ](/Search/BinarySearchTree/src/avl_tree.h#L1790) [最小值 ](/Search/BinarySearchTree/src/avl_tree.h#L1708) [搜索 ](/Search/BinarySearchTree/src/avl_tree.h#L305) [打印 ](/Search/BinarySearchTree/src/avl_tree.h#L1657) [子树插入结点(递归) ](/Search/BinarySearchTree/src/avl_tree.h#L978) [子树插入结点 ](/Search/BinarySearchTree/src/avl_tree.h#L1078) [子树删除结点(递归) ](/Search/BinarySearchTree/src/avl_tree.h#L1185) [子树删除结点 ](/Search/BinarySearchTree/src/avl_tree.h#L1479) [插入动作平衡(by回溯栈) ](/Search/BinarySearchTree/src/avl_tree.h#L783) [删除动作平衡(by回溯栈) ](/Search/BinarySearchTree/src/avl_tree.h#L851) [平衡 ](/Search/BinarySearchTree/src/avl_tree.h#L918) [左单旋转(Left Rotation) ](/Search/BinarySearchTree/src/avl_tree.h#L425) [右单旋转(Right Rotation) ](/Search/BinarySearchTree/src/avl_tree.h#L529) [先左后右双旋转(Left Right Rotation) ](/Search/BinarySearchTree/src/avl_tree.h#L611) [先右后左双旋转(Right Left Rotation) ](/Search/BinarySearchTree/src/avl_tree.h#L671) [子树搜索(递归) ](/Search/BinarySearchTree/src/avl_tree.h#L1382) [获取(子树中)关键字最小结点 ](/Search/BinarySearchTree/src/avl_tree.h#L1746) [获取(子树中)关键字最大结点 ](/Search/BinarySearchTree/src/avl_tree.h#L1828) [获取结点的(中序)前一结点 ](/Search/BinarySearchTree/src/avl_tree.h#L1874) [子树高度 ](/Search/BinarySearchTree/src/avl_tree.h#L1919) [子树打印(递归) ](/Search/BinarySearchTree/src/avl_tree.h#L1611) |
| 4 | [并查集](/Graph/src/disjoint_set.h#L16) | [构造函数 ](/Graph/src/disjoint_set.cpp#L28) [析构函数 ](/Graph/src/disjoint_set.h#L35) [查找(递归) ](/Graph/src/disjoint_set.cpp#L81) [查找 ](/Graph/src/disjoint_set.cpp#L54) [合并 ](/Graph/src/disjoint_set.cpp#L167) [合并(Weighted) ](/Graph/src/disjoint_set.cpp#L118) |
## 排序
| 编号 | 结构 | 操作 |
|----|-----------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 | 排序 | [冒泡排序 ](/Sort/src/bubble_sort.h#L32) [选择排序 ](/Sort/src/selection_sort.h#L38) [插入排序 ](/Sort/src/insertion_sort.h#L45) [希尔排序 ](/Sort/src/shell_sort.h#L57) [归并排序 ](/Sort/src/merge_sort.h#L275) [归并排序(递归) ](/Sort/src/merge_sort.h#L177) [快速排序(递归) ](/Sort/src/quick_sort.h#L33) [堆排序 ](/Sort/src/heap_sort.h#L94) [基数排序(链表) ](/Sort/src/radix_sort_for_linked_list.h#L126) [基数排序(数组) ](/Sort/src/radix_sort.h#L133) |
# 4 关于我们
我们是拥有十多年开发经验的开发工程师, 长期就职于各互联网大厂与著名外企.
如果想更多了解我们,欢迎关注抖音:cyberdash_yuan
**Y_Dash(元哥)**
北邮本硕, 短视频主要出镜人, 底层到应用层, 多年开发经验
**G_Dash(磊哥)**
北邮硕, 10余年安全/系统工程师, 专注C/Linux/网络/安全, 某互联网基础架构部资深工程师
**L_Dash(小于)**
北邮硕, 资深开发工程师, 热爱数据结构和算法
# 5 感谢名单
**感谢下列朋友发现代码bug**
鲁子傲 LLcu2019205455@163.com, 蔡博文 1723004698@qq.com, qiaoge77@163.com, 连菜菜 kukakatoo@gmail.com