数据结构与算法学习库——DSA
介绍
不少在校学生在学习数据结构与算法时痛苦不堪,很多数据结构写起来验证也很困难。如果有一个库,能帮助大家解决构建数据结构的困难,以快速验证自己的想法,那多好啊。
DSA(Data struct & Algorithm) 就是这样的一个工具。
示例 1
我们来看一个示例。
#include <iostream>
#include <string_view>
#include "binary_tree.h"using namespace dsa;
using Tree = BinaryTree<int>;int main() {constexpr std::string_view tree_graph = R"(1 <- right_rotate/ \2 3/ \4 5||2/ \4 1/ \5 3)";// We can build a binary tree from listTree tree({1, 2, 3, 4, 5});std::cout << tree << std::endl;// Rotate at roottree.right_rotate(1);// Print the treestd::cout << tree << std::endl;return 0;
}
只要引入头文件,binary_tree.h
,你就能轻松的创建一个二叉树了。创建二叉树非常的简单,只需要提供一个数组就行了。它的构建规则就像 leetcode 中的示例构建规则。如果你要创建一下像下面的二叉树:
constexpr std::string_view tree_graph = R"(2/ \4 1/ \5 3
)";
只需要调用:
Tree tree({2, 4, 1, {}, {}, 5, 3});
其中 {}, {}
表示用于占位节点 4 的两个空孩子节点,是不是非常简单。整个 list 相当于对二叉树进行层序遍历(空节点也需要遍历)。
当然二叉树非常非常简单,除此之外,你了可以引入 red_black_tree.h
,来构建红黑树,一切都是那么的自然。
如果你想验证自己的想法,比如想自己实现二叉树的一些基本操作,只需要继承 BinaryTree
就可以,像下面这样:
class MyBinaryTree : public BinaryTree<int> {public:
// ...
};
示例 2
下面是红黑树的实现:
template <typename K, typename V>
class RedBlackTree : public BinarySearchTree<K, V> {public:
// ...
};
使用起来也相当方便。
#include <vector>
#include <optional>
#include <red_black_tree.h>using namespace dsa;using Tree = RedBlackTree<int, int>;int main() {Tree tree;for (int i = 10; i <= 100; i += 10) {tree.insert(i, 2*i);}for (int i = 5; i <= 95; i += 10) {tree.insert(i, 2*i);}std::cout << tree << std::endl << std::endl;for (int i = 5; i <= 100; i += 5) {tree.remove(i);std::cout << "Remove:" << i << std::endl;std::cout << tree << std::endl << std::endl;}return 0;
}
上面的程序会输出结果:
项目托管
本项目托管在 https://github.com/ivanallen/dsa
目前还在不断的完善中,欢迎有志之士帮助我们提 Issue,你也可以贡献自己的力量,来丰富这个项目。
联系方式
- QQ 群:610441700
- 钉钉群:
数据结构与算法学习库——DSA相关推荐
- 数据结构与算法学习笔记之 从0编号的数组
数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...
- python leetcode_leetcode 介绍和 python 数据结构与算法学习资料
for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...
- 七桥问题c语言程序数据结构,数据结构与算法学习——图论
什么是图? 在计算机程序设计中,图结构也是一种非常常见的数据结构 但是图论其实是一个非常大的话题 图结构是一种与树结构有些相似的数据结构 图论是数学的一个分支,并且在数学概念上,树是图的一种 它以图为 ...
- 数据结构与算法学习笔记之 提高读取性能的链表(上)
数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...
- 数据结构与算法学习笔记——链栈
数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...
- 数据结构与算法学习笔记4:递归+分治法
数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...
- 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)
数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...
- 完全背包问题贪心算法c语言,数据结构与算法学习之路:背包问题的贪心算法和动态规划算法...
一.背包问题描述: 有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大. 二.解决方法: 1.贪心算 ...
- LeetCode数据结构与算法学习Day03
LeetCode数据结构与算法学习Day03 图解数据结构与算法 59 I 滑动窗口最大值 题目描述: 解题思路: 59 II 队列的最大值 题目描述: 解题思路: 67 把字符串转换成整数 题目描述 ...
最新文章
- 艾伟_转载:把事件当作对象进行传递
- requirejs页面刷新失效js报错问题解决方案
- html 手机复制到剪贴板,移动端和pc端的复制到剪贴板功能
- K8S学习笔记之借助Minikube完成在windows环境下Kubernetes的单节点搭建-(超级简单)
- 视频无损裁剪、转换、合并、加水印、加特效?一切搞定!
- linux 命令 cups,linux cups 打印机命令说明
- useradd 命令的常见用法
- 微信公众平台编辑器教程-微信公众号使用教程32
- 泰坦尼克号沉船生还预测
- 元宵佳节,戴铭老师亲自带你分析iOS行业动态!
- CSS制作舞台聚光灯效果
- VS2022 MAUI Hello World——Windows平台及Android平台效果
- Aspen中物性方法选择
- c# Internet时间服务器同步
- python+uiautomation,怎么学习,雪地跪求大佬赐教
- ssm的校园单车自行车租赁系统|租车系统计算机专业毕业论文java毕业设计开题报告
- Jenkins 邮件模板配置
- 陈建文综合业务:未来万物互联的实现基础
- 深度学习图像超分辨率开山之作SRCNN——原理分析及代码(效果基本可以达到论文中的效果)
- 挑战360无死角讲解Linux内核 进程管理,调度器的5种实现丨C++后端开发丨C/C++Linux服务器开发丨内核开发丨网络编程