1.堆:具備兩個附加屬性的一顆二叉樹,它是一顆徹底二叉樹,對每一結點,它小於或等於其左右孩子(或大於等於其左右孩子)數組
2.最小堆:對每一結點,它小於或等於其左右孩子,將其最小元素存儲在二叉樹的根處,且其根的兩個孩子一樣也是最小堆
網絡3.最大堆:對每一結點,它大於或等於其左右孩子,將其最大元素存儲在二叉樹的根處,且其根的兩個孩子一樣也是最大堆數據結構
操做 說明 addElement 往堆的合適位置添加一個元素 removeElement 從堆中刪除一個元素 removeAllOccurrences 從堆中刪除所指定元素的任何存在 removeMin 刪除堆中的最小元素並返回它 removeMax 刪除樹堆的最大元素並返回它 findMin 返回一個指向堆中最小元素的引用 findMax 返回一個指向堆中最大元素的引用
1.優先級隊列就是遵循兩個排序規則的集合:具備更高優先級的項目在;具備相同優先級的項目使用先進先出方法來肯定其排序學習
2.優先級隊列具備多種應用(好比,操做系統中的任務調度,網絡中的通訊調度,甚至是汽車維修處的做業調度)字體
3.能夠使用某一隊列列表(其中每一隊列都表示了給定優先級的項目)來實現一個優先級隊列操作系統
4.按照優先級對堆排序完成了第一次排序(高優先級的項目在先)。可是,咱們必須對具備相同優先級項目的先進先出排序進行操縱:
解決方案是建立一個 PriorityQueueNode對象,它存儲的是將被放置在隊列中的元素,該元素的優先級,以及元素放進隊列的順序
而後,咱們只需爲 PriorityNode類定義個 compareTo方法,以便先對優先級進行比較,而後在優先級同樣的時候再對階進行比較設計
1.列表實現堆:堆的鏈表實現要求在插入元素後可以向上遍歷該樹,因此堆中的結點必須存儲指向其雙親的指針。指針
2.數組實現堆:樹的根位於位置0,對於每一結點n,n的左孩子將位於數組的2n+1位置處,n的右孩子將位於數組的2(n+1)位置處(反過來一樣也是對的)
對於任何除了根以外的結點n,n的雙親位於(n-1)/2位置處,由於咱們可以計算雙親和孩子的位置,因此與鏈表實現不一樣的是,數組實現不須要建立一個 Heap Node類調試
1.使用堆來對某個數字列表進行排序:將列表的每一元素添加到堆中,而後次一個地將它們從根中刪除,在最小堆的情形下,排序結果將是該列表以升序排列;在最大堆的情形下,排序結果將是該列表以降序排列。code
2.因爲添加和刪除操做的複雜度都爲O(log n),所以能夠得出堆排序的複雜度也是O(log n),可是,這些操做的複雜度爲O(log n)指的是在含有n個元素的列表中添加和刪除一個元素。
問題1:無