数据结构与算法学习库——DSA

Posted --Allen--

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法学习库——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 list
    Tree tree(1, 2, 3, 4, 5);
    std::cout << tree << std::endl;

    // Rotate at root
    tree.right_rotate(1);

    // Print the tree
    std::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的主要内容,如果未能解决你的问题,请参考以下文章

8_DSA算法

NodeJS加密算法(转)

Linux学习68 运维安全-openssl原理与实战

DSA_02:复杂度分析

git库添加密钥

动手打造深度学习框架:基本数据结构与算法