1. 程式人生 > >玩轉資料結構 從入門到進階

玩轉資料結構 從入門到進階

第1章 歡迎學習《玩轉資料結構》 歡迎大家學習《玩轉資料結構》課程。在這個課程中,我們將從底層實現諸多資料結構,從簡單,到複雜,並且探索他們的應用。在這一章,我們將來看一看資料結構的具體作用,學習資料結構的誤區,學習這個課程的注意事項,和課程環境的基本搭建:) …

1-1 歡迎學習《玩轉資料結構》 1-2 學習資料結構(和演算法)到底有沒有用? 1-3 關於課程學習的更多注意事項 1-4 課程程式設計環境搭建 第2章 不要小瞧陣列 陣列,看似是最簡單的資料結構,但是,大多數語言為我們提供的都是靜態陣列,如何封裝一個屬於我們自己的動態陣列,將是這一章討論的重點。同時,我們也將探討泛型,複雜度分析,乃至複雜度的震盪,等相關高階話題

2-1 使用Java中的陣列 2-2 二次封裝屬於我們自己的陣列 2-3 向陣列中新增元素 2-4 陣列中查詢元素和修改元素 2-5 包含,搜尋和刪除 2-6 使用泛型 2-7 動態陣列 2-8 簡單的複雜度分析 2-9 均攤複雜度和防止複雜度的震盪 第3章 棧和佇列 棧和佇列都是極其簡單的線性資料結構,其中的操作甚至都是陣列操作的子集,但卻在電腦科學中有著極其重要的應用。在這一章,我們就來探索棧和佇列的奧祕。我們將看到使用底層資料結構搭建上層資料結構的過程,同時對於佇列,我們也將改進底層結構,完成迴圈佇列的實現。…

3-1 棧和棧的應用:撤銷操作和系統棧 3-2 棧的基本實現 3-3 棧的另一個應用:括號匹配 3-4 關於Leetcode的更多說明 3-5 陣列佇列 3-6 迴圈佇列 3-7 迴圈佇列的實現 3-8 陣列佇列和迴圈佇列的比較 第4章 最基礎的動態資料結構:連結串列 在這一章,我們將接觸第一個動態資料結構:連結串列。我們將通過對連結串列的底層實現,更深入的理解對引用(或者是指標)的操作。同時,我們也將利用連結串列,實現棧和佇列,並基於不同的底層實現,進行效能的比較。

4-1 什麼是連結串列 4-2 在連結串列中新增元素 4-3 使用連結串列的虛擬頭結點 4-4 連結串列的遍歷,查詢和修改 4-5 從連結串列中刪除元素 4-6 使用連結串列實現棧 4-7 帶有尾指標的連結串列:使用連結串列實現佇列 第5章 連結串列和遞迴 很多同學都會忽視連結串列和遞迴之間千絲萬縷的聯絡。其實,連結串列也擁有著天然的遞迴結構。我們在這一章,就將通過連結串列這種簡單的資料結構,一點一點為大家揭開遞迴,這個在計算機的世界中最為重要的邏輯構成方式的神祕面紗!…

5-1 Leetcode中和連結串列相關的問題 5-2 測試自己的Leetcode連結串列程式碼 5-3 遞迴基礎與遞迴的巨集觀語意 5-4 連結串列的天然遞迴結構性質 5-5 遞迴執行的機制:遞迴的微觀解讀 5-6 遞迴演算法的除錯 5-7 更多和連結串列相關的問題 第6章 二分搜尋樹 二分搜尋樹將是我們接觸的第一個非線性資料結構。在這一章,我們將通過對二分搜尋樹的底層實現,瞭解對樹結構的基本操作方式。同時,由於樹結構天然的遞迴性質,我們將在這一章,實現諸多遞迴演算法,進一步理解遞迴的奧妙。…

6-1 為什麼要研究樹結構 6-2 二分搜尋樹基礎 6-3 向二分搜尋樹中新增元素 6-4 改進新增操作:深入理解遞迴終止條件 6-5 二分搜尋樹的查詢操作 6-6 二分搜尋樹的前序遍歷 6-7 二分搜尋樹的中序遍歷和後序遍歷 6-8 深入理解二分搜尋樹的前中後序遍歷 6-9 二分搜尋樹前序遍歷的非遞迴實現 6-10 二分搜尋樹的層序遍歷 6-11 刪除二分搜尋樹的最大元素和最小元素 6-12 刪除二分搜尋樹的任意元素 6-13 更多二分搜尋樹相關話題 第7章 集合和對映 在這一章,我們將綜合之前學習的陣列,連結串列和二分搜尋樹,探索更加高層的資料結構應用:集合(Set)和對映(Map)。通過這一章的學習,我們將對二分搜尋樹的複雜度分析,有更加感性的認識,同時看到二分搜尋樹的巨大優勢,以及相應的侷限性。…

7-1 集合基礎和基於二分搜尋樹的集合實現 7-2 基於連結串列的集合實現 7-3 集合類的複雜度分析 7-4 _Leetcode中的集合問題和更多集合相關問題 7-5 對映基礎 7-6 基於連結串列的對映實現 7-7 基於二分搜尋樹的對映實現 7-8 對映的複雜度分析和更多對映相關問題 7-9 Leetcode上更多集合和對映的問題 第8章 優先佇列和堆 在這一章,我們將探索一種特殊的樹結構——堆。學習完這一章,同學們將對堆的相關操作有深入的認識,甚至達到白板程式設計的程度。同時,我們也將拓寬對佇列的認識,理解什麼是廣義佇列,什麼是優先佇列。

8-1 什麼是優先佇列 8-2 堆的基礎表示 8-3 向堆中新增元素和Sift Up 8-4 從堆中取出元素和Sift Down 8-5 Heapify 和 Replace 8-6 基於堆的優先佇列 8-7 Leetcode上優先佇列相關問題 8-8 Java中的PriorityQueue 8-9 和堆相關的更多話題和廣義佇列 第9章 線段樹 線段樹是一種特殊的樹結構。這種資料結構主要用於解決“線段”或者是“區間”這種特殊的資料,是演算法競賽中的常客。在這一章,我們將從底層實現屬於我們自己的線段樹,完成線段樹的建立,查詢,更新三個操作,並且通過實際比較,看到線段樹解決“線段”相關問題的巨大優勢。 …

9-1 什麼是線段樹 9-2 線段樹基礎表示 9-3 建立線段樹 9-4 線段樹中的區間查詢 9-5 Leetcode上線段樹相關的問題 9-6 線段樹中的更新操作 9-7 更多線段樹相關的話題 第10章 Trie Trie將是我們學習的第一個,也是唯一一個多叉樹結構。Trie用於高效的處理字串相關的查詢問題,我們將看到,使用Trie,對字串的查詢效率,將和字串的多少無關!這樣的效率提升,將絕對震驚你的老闆和同事!

10-1 什麼是Trie字典樹 10-2 Trie字典樹基礎 10-3 Trie字典樹的查詢 10-4 Trie字典樹的字首查詢 10-5 Trie字典樹和簡單的模式匹配 10-6 Trie字典樹和字串對映 10-7 更多和Trie字典樹相關的話題 10-8 基於雜湊表或者陣列的Trie 第11章 並查集 並查集是一種奇怪的樹結構。在並查集中,不是父親指向孩子,而是孩子指向父親。這樣的一種奇怪結構,卻能出奇快的解決集合相關的合併和查詢問題。在這一章,我們將連續優化我們的並查集,釋放出並查集的最大能量!

11-1 什麼是並查集 11-2 Quick Find 11-3 Quick Union 11-4 基於size的優化 11-5 基於rank的優化 11-6 路徑壓縮 11-7 更多和並查集相關的話題 第12章 AVL 我們在這一章將學習最為經典的平衡二叉樹:AVL樹。我們將深入理解AVL樹中的旋轉操作。最後,我們也將看到,使用我們自己實現的AVL樹,在極端情況下,相較普通的二分搜尋樹,效能巨大的提升。

12-1 平衡樹和AVL 12-2 計算節點的高度和平衡因子 12-3 檢查二分搜尋樹性質和平衡性 12-4 旋轉操作的基本原理 12-5 左旋轉和右旋轉的實現 12-6 LR 和 RL 12-7 從AVL樹中刪除元素 12-8 基於AVL樹的集合和對映 第13章 紅黑樹 沒有紅黑樹,可能就沒有資料庫到今天的發展。紅黑樹更是所有語言中樹結構的首選底層實現。在這一章,我們將從2-3樹入手,帶領大家理解2-3樹和紅黑樹的等價性,進而深入理解紅黑樹的各項操作。大家將看到,紅黑樹雖然複雜,但有規律的去理解,也能輕鬆拿下!…

13-1 紅黑樹與2-3樹 13-2 2-3樹的絕對平衡性 13-3 紅黑樹與2-3樹的等價性 13-4 紅黑樹的基本性質和複雜度分析 13-5 保持根節點為黑色和左旋轉 13-6 顏色翻轉和右旋轉 13-7 紅黑樹中新增新元素 13-8 紅黑樹的效能測試 13-9 更多和紅黑樹相關的話題 13-10 對於紅黑樹,任何不平衡都會在三次旋轉內解決? 第14章 雜湊表 在資料結構的世界裡,雜湊表可謂影響深遠。雜湊的應用早就遠遠超越了資料儲存,在安全領域發揮著重要的作用。就連”區塊鏈“這種魔法黑科技,都離不開雜湊的影子。在這一章,我們將具體的看一看,到底什麼是雜湊表,雜湊表比起之前學習的資料結構,到底有怎樣的優勢。…

14-1 雜湊表基礎 14-2 雜湊函式的設計 14-3 Java中的 hashCode 方法 14-4 鏈地址法 Separate Chaining 14-5 實現屬於我們自己的雜湊表 14-6 雜湊表的動態空間處理與複雜度分析。 14-7 雜湊表更復雜的動態空間處理方法 14-8 更多雜湊衝突的處理方法 第15章 結尾語 通過這個課程的學習,同學們已經掌握了相當多的資料結構。可以說是資料結構領域的”小牛“了。希望通過這個課程的學習,大家更掌握了研究資料結構的方法,通過自己的努力,向資料結構領域的”大神“進軍。大家加油! …

15-1 更廣闊的資料結構的世界,大家加油!