玩轉資料結構從入門到進階 0基礎學好資料結構分享
阿新 • • 發佈:2018-12-04
課程簡介:
從資料結構基礎到二叉樹、紅黑樹、雜湊表,bobo老師精心設計本課程,詳細生動的為你講解資料結構。讓你面對資料結構可以學的會、玩的溜。掌握資料結構,完成從“搬磚”到“蓋樓”的蛻變,就在此課。各位小夥伴不要錯過!
本門課程更側重系統地介紹資料結構,涉及基礎資料結構如:動態陣列,棧,佇列,連結串列,集合,對映等,以及高階資料結構如:線段樹,Trie,AVL,紅黑樹,雜湊表等,此外本門課程是面向資料結構零基礎的。
課程目錄:
第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 鏈地址法 Seperate Chaining
14-5 實現屬於我們自己的雜湊表
14-6 雜湊表的動態空間處理與複雜度分析。
14-7 雜湊表更復雜的動態空間處理方法
14-8 更多雜湊衝突的處理方法
第15章 結尾語
通過這個課程的學習,同學們已經掌握了相當多的資料結構。可以說是資料結構領域的”小牛“了。希望通過這個課程的學習,大家更掌握了研究資料結構的方法,通過自己的努力,向資料結構領域的”大神“進軍。大家加油! ...
15-1 更廣闊的資料結構的世界,大家加油!
下載地址:百度網盤