資料結構與演算法學習庫 DSA

2021-09-20 13:17:34 字數 2036 閱讀 1702

不少在校學生在學習資料結構與演算法時痛苦不堪,很多資料結構寫起來驗證也很困難。如果有乙個庫,能幫助大家解決構建資料結構的困難,以快速驗證自己的想法,那多好啊。

dsa(data struct & algorithm) 就是這樣的乙個工具。

我們來看乙個示例。

#include

#include

#include

"binary_tree.h"

using

namespace dsa;

using tree = binarytree<

int>

;int

main()

);std::cout << tree << std::endl;

// rotate at root

tree.

right_rotate(1

);// print the tree

std::cout << tree << std::endl;

return0;

}

只要引入標頭檔案,binary_tree.h,你就能輕鬆的建立乙個二叉樹了。建立二叉樹非常的簡單,只需要提供乙個陣列就行了。它的構建規則就像 leetcode 中的示例構建規則。如果你要建立一下像下面的二叉樹:

constexpr std::string_view tree_graph =

r"( 2

/ \

4 1

/ \

5 3

)";

只需要呼叫:

tree tree(,

,5,3});

其中{}, {}表示用於佔位節點 4 的兩個空孩子節點,是不是非常簡單。整個 list 相當於對二叉樹進行層序遍歷(空節點也需要遍歷)。

當然二叉樹非常非常簡單,除此之外,你了可以引入red_black_tree.h,來構建紅黑樹,一切都是那麼的自然。

如果你想驗證自己的想法,比如想自己實現二叉樹的一些基本操作,只需要繼承binarytree就可以,像下面這樣:

class

mybinarytree

:public binarytree<

int>

;

下面是紅黑樹的實現:

template

<

typename k,

typename v>

class

redblacktree

:public binarysearchtree

;

使用起來也相當方便。

#include

#include

#include

using

namespace dsa;

using tree = redblacktree<

int,

int>

;int

main()

for(

int i =

5; i <=

95; i +=10

) std::cout << tree << std::endl << std::endl;

for(

int i =

5; i <=

100; i +=5

)return0;

}

上面的程式會輸出結果:

本專案託管在

目前還在不斷的完善中,歡迎有志之士幫助我們提 issue,你也可以貢獻自己的力量,來豐富這個專案。

資料結構與演算法學習

我想重新學習一下資料結構與演算法,打好基礎。to measure is to know.我們用演算法複雜度t n 來表示演算法的效率,效能。t n 的取值 所有問題規模為n的問題例項中,將他們的計算成本進行總體的比較,取出最壞情況下的值。有幾點需要catch,1.演算法執行的時間,會根據程式語言,作...

資料結構與演算法學習筆記

演算法基礎篇 第一章 演算法概述 首先了解一下基本的概念 1.1 什麼是演算法呢?從字面意義上理解,演算法就是用於計算的方法,用這種方法達到預期的結果。通俗的講,演算法可以理解為乙個完整的解題步驟,由一些基本的運算和規定的運算順序組成。通過這樣的解題步驟可以解決特定的問題。演算法可以抽象出5個特徵 ...

資料結構與演算法學習二

1 用js中object物件模擬集合set的資料結構 set集合中的資料結構 s s 即集合中的鍵 值相同。故,可令object物件中的鍵 值相同,來模擬set集合及其中的方法,如下 用js中object模擬實現集合set資料結構 es6中有set類,避免混淆這裡用set2 var set2 fun...