iT邦幫忙

資料結構相關文章
共有 219 則文章

技術 菜雞學習資料結構的 30 日讀書分享【Day 26】

遞迴定義 在高階語言中,呼叫自己和其他函數並沒有本質的不同。 我們把一個直接呼叫自己或是透過一系列的呼叫敘述間接地呼叫自己的函數,稱為遞迴函數。 當然,寫遞迴程...

技術 菜雞學習資料結構的 30 日讀書分享【Day 25】

費式數列 假設我們需要列印出前 40 位的費氏數列數。 程式如下: int main() { int i; int a[40]; a[0...

鐵人賽 Software Development DAY 17

技術 Day 17 把空指標拿來用:引線二元樹

Day 15 用遞迴寫出了前序、中序、後序三種走訪,程式很短也很直觀。但遞迴看起來簡單,背後其實是程式偷偷幫我們記住「走完左子樹之後要回到哪一個節點」:每往下走...

技術 菜雞學習資料結構的 30 日讀書分享【Day 24】

堆疊的應用: 遞迴 堆疊有一個很重要的應用: 在程式語言中實現了遞迴。 那麼甚麼是遞迴呢? 當妳往鏡子前面一站,鏡子裡面就有一個你的成像。 但你試過兩面鏡子對著...

鐵人賽 Software Development DAY 16

技術 Day 16 從走訪結果還原二元樹,再認識二元運算樹

上一篇最後提到:如果我們只看一種走訪結果,通常無法確定一棵二元樹長什麼樣子。那反過來問,如果手上有兩種走訪結果,能不能把原本的樹畫回來?如果節點資料不重複,選用...

技術 菜雞學習資料結構的 30 日讀書分享【Day 23】

堆疊的作用 有的人可能會覺得用陣列或鏈結串列直接時限功能不就行了嗎? 幹嘛要引入存入堆疊這樣的資料結構呢? 其實這和我們明明有兩隻腳可以走路,幹嘛還要乘坐汽車、...

鐵人賽 Software Development DAY 15

技術 Day 15 走一遍才知道:二元樹的走訪

上一篇用陣列和鏈結把二元樹建立起來了,但要怎麼確定 A 的左邊真的接到 B、B 的右邊真的接到 D,而沒有接錯位置?最直接的檢查方法,就是從根節點出發,把樹裡的...

技術 菜雞學習資料結構的 30 日讀書分享【Day 22】

堆疊與佇列 堆疊的定義: 類似彈匣中的子彈一樣先進去,卻要後出來,反之則是後進去可以先出來的。 在軟體應用中,堆疊這種後進先出的資料結構應用是非常普遍的。 例如...

鐵人賽 Software Development DAY 14

技術 Day 14 從迷宮岔路認識二元樹

想像你正在闖一座迷宮:每到一個路口,最多只能選左邊或右邊。有些路口兩條路都通,有些只開一邊,走到盡頭就沒有下一個路口。把路口當成節點、路線當成連結,這種每個節點...

技術 菜雞學習資料結構的 30 日讀書分享【Day 21】

線性串列的鏈式儲存結構 優點: 無須表示串列中元素之間的邏輯關係而增加額外的儲存空間 可以快速地存取串列中任一位置的元素 缺點: 插入和刪除操作需要移動大...

技術 菜雞學習資料結構的 30 日讀書分享【Day 20】

循序儲存結構的插入與刪除 獲得元素操作 對線性串列的循序儲存結構來說,如果要實現 GetElem 的操作,即將線性串列 L 中的第 i 個位置元素值傳回,其實是...

鐵人賽 Software Development DAY 12

技術 Day 12|用指標把資料串起來:鏈結式堆疊與佇列

陣列版的堆疊和佇列會先準備一段連續空間,資料放進預留的位置。今天改用鏈結串列:每筆資料各自放在一個節點裡,再用指標把節點接起來。這種做法不必一開始決定固定容量,...

技術 菜雞學習資料結構的 30 日讀書分享【Day 19】

線性串列 線性串列從名字就能感覺到,是具有像線一樣性質的串列。 在廣場上有很多人分散在各處,當中有些是小朋友,也有很多大人,甚至還有一些寵物,這些小朋友的資料對...

鐵人賽 Software Development DAY 11

技術 Day 11|排隊輪到誰?佇列與環狀佇列

想像大家排隊買票:先到的人先買,後來的人排到隊伍最後面。資料結構裡的**佇列(queue)**也是這樣運作:先放進去的資料,會先被取出來。這剛好和上一篇的堆疊相...

技術 菜雞學習資料結構的 30 日讀書分享【Day 18】

那麼下面的這個迴圈巢狀結構,它的時間複雜度是多少呢? int i,j; for (i = 0; i < n; i++) { for (j = i;...

鐵人賽 Software Development DAY 10

技術 Day 10 堆疊:最後放進去的,最先拿出來

我們想像桌上疊著幾本書:要放一本新書時,通常放在最上面;要拿書時,也先拿最上面的那一本。中間的書不能直接拿出來,必須先移開壓在上面的書。 堆疊(stack)就是...

技術 菜雞學習資料結構的 30 日讀書分享【Day 17】

平方階 下面實例是一個迴圈巢狀結構,它的內迴圈時間複雜度為 O(n)。 int i j; for (i = 0; i < n; i++) { fo...

鐵人賽 Software Development DAY 9

技術 Day 9|單向、雙向與環狀鏈結串列

上一篇練習的單向鏈結串列,每個節點存放資料,並用 next 記住下一個節點的位置。從 head 出發,就能沿著 next 逐一找到後面的節點,直到最後的 NUL...

技術 菜雞學習資料結構的 30 日讀書分享【Day 16】

線性階 線性階的迴圈結構會複雜很多,需要確定某個演算法的階次,我們常常需要確定某個特定敘述或某個敘述集的執行次數。 因此我們需要分析演算法的複雜度,關鍵就是要分...

鐵人賽 Software Development DAY 8

技術 Day 8 牽線與拆線:單向鏈結串列的走訪、插入與刪除

上一篇認識了單向鏈結串列的結構:每個節點保存資料,並用 next 指向下一個節點。這一篇要練習三個基本操作:走訪、插入與刪除。 假設目前有一條串列: head...

技術 菜雞學習資料結構的 30 日讀書分享【Day 15】

推導大 O 階方法 如何分析一個演算法的時間複雜度呢? 推導大 O 階: 用常數 1 取代執行時間中的所有加法常數。 在修改後的執行次數函數中,只保留最階項。...

鐵人賽 Software Development DAY 7

技術 Day 7 資料不用排在一起:認識鏈結串列

前幾天學習陣列的插入與刪除時,我們發現一個麻煩:只要在中間加入或拿掉一筆資料,後面的元素通常都要跟著搬動。如果資料很多,搬動的成本也會增加。那麼,有沒有一種方法...

技術 菜雞學習資料結構的 30 日讀書分享【Day 14】

演算法時間複雜度 演算法時間複雜度定義: 在進行演算法分析時,敘述整體執行次數 T(n) 是關於問題規模 n 的函數,進而分析 T(n) 隨 n 的變化情況並確...

鐵人賽 Software Development DAY 6

技術 Day 6 從一串字到多層表格:字串與多維陣列

C 的字串與 char 陣列 前幾天我們用陣列存放一串數字。那麼,一串文字又是怎麼存的呢?在 C 語言中,字串(string)可以放在 char 陣列裡,最後用...

技術 菜雞學習資料結構的 30 日讀書分享【Day 13】

演算法效率的度量方法 事後統計方法 事後統計方法: 這種方法主要是透過設計好的測試程式和資料,利用電腦計時器對不同演算法編制的程式執行時間進行比較,進一步確定演...

鐵人賽 Software Development DAY 5

技術 Day-5 陣列的資料搬家:搜尋、插入與刪除

上一篇看到,陣列元素會連續存放在記憶體中。這個特性讓電腦可以透過索引直接找到指定元素,但也帶來一個限制:如果要在陣列中間插入或刪除資料,其他元素就可能必須跟著「...

鐵人賽 Build on Google AI DAY 4

技術 Day 4|音樂祭 timetable 看得懂,但要怎麼變成電腦看得懂的資料?

今天終於要開始處理資料了。 原本以為這件事很簡單,畢竟 timetable 上都已經寫得清清楚楚: MITSKI WHITE STAGE 22:10–23:4...

技術 菜雞學習資料結構的 30 日讀書分享【Day 12】

可讀性 可讀性: 演算法設計的另一目的是為了便於閱讀、了解和交流。 可讀性高有助於人們了解演算法,晦澀難懂的演算法常常隱含著錯誤,不易被發現,且難於偵錯和修改。...

鐵人賽 Software Development DAY 4

技術 Day-4 陣列的幕後世界:記憶體與指標

上一篇已經學會如何宣告陣列、使用索引存取元素,並搭配迴圈處理全部資料。這一篇要繼續往下理解:陣列為什麼能透過索引快速找到元素?陣列名稱又為什麼和指標有關? 這些...

技術 菜雞學習資料結構的 30 日讀書分享【Day 11】

演算法設計的要求 正確性 正確性: 演算法的正確性是指演算法至少應該具有輸入、輸出和加工處理無問題性、能正確反映問題的需求、能夠獲得問題的正確答案。 但是演算法...