二叉堆是乙個完全二叉樹,區別於滿二叉樹。最大堆是堆的兩種形式之一。當二叉堆的任意結點的值不大於其父親結點的值,那麼這個堆就是最大堆。
根結點(亦稱為堆頂)的關鍵字是堆裡所有結點關鍵字中最大者,稱為大根堆,又稱最大堆(大頂堆)。
大根堆要求根節點的關鍵字既大於或等於左子樹的關鍵字值,又大於或等於右子樹的關鍵字值。
最大堆下層元素的值不一定小於上層元素的值。如下圖:由於最大堆是二叉堆,二叉堆又是乙個滿二叉樹,用線性結構arraylist來儲存比較方便,不會造成空間浪費。
由於在陣列中儲存元素,所以任意結點的父親結點滿足下列關係:
package 堆和優先佇列;
import 順序表.arraylist;
public
class
maxheap
comparable
>
public
maxheap
(int capacity)
public
maxheap
(e arr)
}//判斷堆中的元素個數
public
intgetsize()
//判斷是否為空
public
boolean
isempty()
//得到父親結點
private
intparent
(int index)
return
(index-1)
/2;}
//得到左孩子結點
private
intleftchild
(int index)
//得到右孩子結點
private
intrightchild
(int index)
//新增元素
/* 新增元素的時候從堆尾進行。
*/public
void
add(e e)
//上浮函式
private
void
siftup
(int index)
}//檢視堆中的最大值。最大堆的堆頂就是最大元素
public e findmax()
return data.
getfirst()
;}//刪除堆中的最大值
public e removemax()
private
void
siftdown
(int index)
//交換
if(data.
get(index)
.compareto
(data.
get(k)
)<0)
else}}
//取出原先的最大值,替換新值。
public e replace
(e e)
//清空堆
public
void
clear()
}
最大堆資料結構
儲存結構 堆中元素在陣列中是按照完全二叉樹層序儲存的。陣列起始結點為1。下標特點 對於下標為i的結點,i 2為父節點,左右子結點分別為2i和2i 1。最大堆特點 任一結點的值大於或者等於其子結點的值。最小堆特點 任一結點的值小於或者等於其子結點的值。include include define ma...
資料結構 最大堆排序 python實現
二叉 堆資料結構是一種陣列物件。可以被視為一棵完全二叉樹。數中每個節點與陣列中存放該節點值的那個元素對應。樹的每一層都是填滿的。最後一層可能除外 最後一層從乙個節點的左子樹開始填 引用自 演算法導論 再抄一遍複習一下 從無序的陣列構建乙個完整的堆,最好及最壞的情況下,建立堆時間複雜度均為o nlgn...
經典資料結構之最大堆
最大堆和最小堆是常用的優先佇列。其概念也比較簡單,用樹的方式描述,就是,父節點比子節點大 最大堆 小則為最小堆。最大堆和最小堆廣泛用在有先後順序的任務排程中。比如cpu的任務排程等。先上 後面再詳細解釋和補充我的看法。標頭檔案 ifndef cbinarytree h included define...