介绍

不少在校学生在学习数据结构与算法时痛苦不堪,很多数据结构写起来验证也很困难。如果有一个库,能帮助大家解决构建数据结构的困难,以快速验证自己的想法,那多好啊。

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相关推荐

  1. 数据结构与算法学习笔记之 从0编号的数组

    数据结构与算法学习笔记之 从0编号的数组 前言 数组看似简单,但掌握精髓的却没有多少:他既是编程语言中的数据类型,又是最基础的数据结构: 一个小问题: 为什么数据要从0开始编号,而不是 从1开始呢? ...

  2. python leetcode_leetcode 介绍和 python 数据结构与算法学习资料

    for (刚入门的编程)的高中 or 大学生 leetcode 介绍 leetcode 可以说是 cs 最核心的一门"课程"了,虽然不是大学开设的,但基本上每一个现代的高水平的程序 ...

  3. 七桥问题c语言程序数据结构,数据结构与算法学习——图论

    什么是图? 在计算机程序设计中,图结构也是一种非常常见的数据结构 但是图论其实是一个非常大的话题 图结构是一种与树结构有些相似的数据结构 图论是数学的一个分支,并且在数学概念上,树是图的一种 它以图为 ...

  4. 数据结构与算法学习笔记之 提高读取性能的链表(上)

    数据结构与算法学习笔记之 提高读取性能的链表(上) 前言 链表(Linked list)比数组稍微复杂一点,在我们生活中用到最常见的应该是缓存,它是一种提高数据读取性能的技术,常见的如cpu缓存,浏览 ...

  5. 数据结构与算法学习笔记——链栈

    数据结构与算法学习笔记(C语言) 链栈 在开始链栈的学习之前,我们先实现一下上一篇文章中提到的检查括号匹配的小程序,鉴于水平有限,本人就随便写一下代码好了,目标仅限于对功能的实现. /*用顺序栈这种数 ...

  6. 数据结构与算法学习笔记4:递归+分治法

    数据结构与算法学习笔记4 递归 斐波那契数列 青蛙跳台阶问题 链表倒序打印 分治法 二分查找/折半查找 Binary Search 题目1:快速幂 题目2:如何判断一个数是否为2的次幂 递归 指在函数 ...

  7. 数据结构与算法学习⑤(BFS和DFS 贪心算法 二分查找)

    数据结构与算法学习⑤ 数据结构与算法学习⑤ 1.BFS和DFS 1.1.深度优先搜索算法 1.2.广度优先搜索算法 面试实战 102. 二叉树的层序遍历 104. 二叉树的最大深度 515. 在每个树 ...

  8. 完全背包问题贪心算法c语言,数据结构与算法学习之路:背包问题的贪心算法和动态规划算法...

    一.背包问题描述: 有N种物品和一个重量为M的背包,第i种物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包重量,且价值总和最大. 二.解决方法: 1.贪心算 ...

  9. LeetCode数据结构与算法学习Day03

    LeetCode数据结构与算法学习Day03 图解数据结构与算法 59 I 滑动窗口最大值 题目描述: 解题思路: 59 II 队列的最大值 题目描述: 解题思路: 67 把字符串转换成整数 题目描述 ...

最新文章

  1. 艾伟_转载:把事件当作对象进行传递
  2. requirejs页面刷新失效js报错问题解决方案
  3. html 手机复制到剪贴板,移动端和pc端的复制到剪贴板功能
  4. K8S学习笔记之借助Minikube完成在windows环境下Kubernetes的单节点搭建-(超级简单)
  5. 视频无损裁剪、转换、合并、加水印、加特效?一切搞定!
  6. linux 命令 cups,linux cups 打印机命令说明
  7. useradd 命令的常见用法
  8. 微信公众平台编辑器教程-微信公众号使用教程32
  9. 泰坦尼克号沉船生还预测
  10. 元宵佳节,戴铭老师亲自带你分析iOS行业动态!
  11. CSS制作舞台聚光灯效果
  12. VS2022 MAUI Hello World——Windows平台及Android平台效果
  13. Aspen中物性方法选择
  14. c# Internet时间服务器同步
  15. python+uiautomation,怎么学习,雪地跪求大佬赐教
  16. ssm的校园单车自行车租赁系统|租车系统计算机专业毕业论文java毕业设计开题报告
  17. Jenkins 邮件模板配置
  18. 陈建文综合业务:未来万物互联的实现基础
  19. 深度学习图像超分辨率开山之作SRCNN——原理分析及代码(效果基本可以达到论文中的效果)
  20. 挑战360无死角讲解Linux内核 进程管理,调度器的5种实现丨C++后端开发丨C/C++Linux服务器开发丨内核开发丨网络编程

热门文章

  1. c++ 中对vector的使用方法
  2. mysql命令行安装教程_MySQL命令行教程
  3. 廖雪峰Git简明教程整理
  4. Python提取图片二维码Python
  5. “Outlook 中的搜索结果不正确,因为缺少MapiPH.dll” 的解决方法
  6. OpenGL ES 苹果编程指南 官方文档翻译01
  7. 开源BI工具2:apache/superset
  8. 浏览器DNS解析过程
  9. db与redis一致性解决策略:延时双删
  10. 使用Spreadsheet Compare工具对比Excel文件差异