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 更廣闊的數據結構的世界,大家加油!

下載地址:百度網盤下載

玩轉數據結構 從入門到進階