iT邦幫忙

鐵人檔案

2022 iThome 鐵人賽
回列表
Software Development

用C++ 設計程式中的系統櫃 系列

寫過程式的人都知道,每個程式執行的效率以及使用的記憶體空間都大不相同,即便他們的目的相同,為什麼呢?原因就在於如何存取資料,以及怎麼取得資料!想像你是一個儲貨中心的老闆,你要怎麼去加速員工取貨與存貨的速度?或許你會設計不同的空間,或許你會將貨物分門別類!這些都是方法。在這場鐵人賽中,我會分享如何用C++管理程式中的資料,換句話說,用C++建造出不同的儲物空間,而在程式設計中,這門學問就叫做「資料結構」。

鐵人鍊成 | 共 30 篇文章 | 4 人訂閱 訂閱系列文 RSS系列文
DAY 21

[Day 21] 用C++ 設計程式中的系統櫃:BST::insert()

新增節點的方式大概可以以兩種方式來概括: 非遞迴形式:void BST::insert(int); 相對直觀 使用 while 迴圈 遞迴形式:void...

2022-09-22 ‧ 由 chmh0624 分享
DAY 22

[Day 22] 用C++ 設計程式中的系統櫃:BST::traversal() Part1/3

想輸出鏈結串列其實很容易,只要找到當前節點的 next 即可找到下一個節點。有了節點,我們就可以輸出節點中的資料。這個是之前介紹過的 LinkedList::p...

2022-09-23 ‧ 由 chmh0624 分享
DAY 23

[Day 23] 用C++ 設計程式中的系統櫃:BST::traversal() Part2/3

上一篇文章,我們對三種遍歷法都有一定的認識了,今天我們要練習用迴圈來實作,難度會深一點! 我們都知道在遍歷一棵樹時,會遇到無數的岔路,那你有想過要怎麼紀錄岔路嗎...

2022-09-24 ‧ 由 chmh0624 分享
DAY 24

[Day 24] 用C++ 設計程式中的系統櫃:BST::traversal() Part3/3

今天要來完成第四種遍歷法:Level Order Traversal 比起前三者來說,他顯得更加直觀,因為他是按照 level 大小來輸出資料,換句話說,就是由...

2022-09-25 ‧ 由 chmh0624 分享
DAY 25

[Day 25] 用C++ 設計程式中的系統櫃:BST::Search()

今日目標: BST::getMax() BST::getMin() BST::search(int tg) (註:tg 為 target 的縮寫)...

2022-09-26 ‧ 由 chmh0624 分享
DAY 26

[Day 26] 用C++ 設計程式中的系統櫃:BST::remove() Part 1/2

刪除節點一向都是比較困難的,我們要去注意 根節點是不是我們要去刪除的目標節點 如何連接目標節點的父節點與子節點 如果目標節點有兩個子節點,又該如何與父節點連接...

2022-09-27 ‧ 由 chmh0624 分享
DAY 27

[Day 27] 用C++ 設計程式中的系統櫃:BST::remove() Part 2/2

今天我們要完成以下的狀況: 目標節點(BSTNode *tg)可以分成三種狀況: tg == NULL : 目標不存在 tg == this -> ro...

2022-09-28 ‧ 由 chmh0624 分享
DAY 28

[Day 28] 用C++ 設計程式中的系統櫃:BST::lowestCommonAncestor()

在二元搜尋樹中,有這麼一個經典的題目:尋找兩節點的共同祖先! 但是共同祖先可以有很多個,所以我們會選擇最接近的共同祖先作為這題的輸出。 那要怎麼實作呢? 我們...

2022-09-29 ‧ 由 chmh0624 分享
DAY 29

[Day 29] 用C++ 設計程式中的系統櫃:BST::isValid()

學了二元搜尋樹的基本,那想過怎麼判斷這棵樹是不是二元搜尋樹嗎? 還記得有一個遍歷演算法叫做「中序遍歷」或 inorder traversal 嗎?用這個遍歷法...

2022-09-30 ‧ 由 chmh0624 分享
DAY 30

[Day 30] 用C++ 設計程式中的系統櫃:總結

30 天的時間,我分享了資料結構的入門,從最根本的指標開始,到進階的鏈結串列,再到二元搜尋樹。 我覺得最困難的部分大概就是指標了吧!因為鏈結串列、二元樹都是基於...

2022-10-01 ‧ 由 chmh0624 分享