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