堆可以視為一棵完全二叉樹,樹的每一層都是被填滿的,最後一層可能除外,所以堆可以用陣列來表示。對於陣列中任意位置
i上的元素,其左兒子在位置
i*2+1
,其右兒子在位置
i*2+2
上,其父節點在位置
(i+1)/2-1處。
二叉堆有兩種
:最大堆和最小堆。最大堆中,除根結點外(其無父結點),每個結點的關鍵字都不大於其父結點的關鍵字。最小堆中,除根結點外,每個結點的關鍵字都不小於其父結點的關鍵字。
插入元素
(insert):
在堆中插入元素
x時,在陣列的尾部增加乙個空穴,如果
x可以放在空穴並使堆的性質滿足,則插入完成。否則,將空穴的父節點的關鍵字下移到空穴,使空穴上移。重複該過程直到
x可以插入空穴。這種方法叫上濾。下圖展示了使用上濾法將
14插入乙個最小堆的過程(圖來自《資料結構與演算法分析:
c語言描述》)。
刪除最小元素
(deletemin):
最小堆的最小元素在根結點處。刪除最小元素後,在根結點處產生乙個空穴,如果將堆中最後乙個元素
x放在空穴中可以不破壞堆的性質,則刪除完成。否則將空穴兩個兒子中較小的乙個放入空穴,空穴下移一層。重複該過程直到
x可以放入空穴中。這種方法叫做
下濾。下圖展示了
deletemin
的執行過程。
二叉堆的實現
include include define max heap size 101 class binaryminheap void insert intvalue void removemin intgetmin void displayheaparray private int heaparray...
二叉堆的實現
1.堆的概念 這裡只需要注意兩點 a.堆的儲存方式 就是順序儲存在陣列中,在二叉樹中表現為滿二叉樹 b.堆的用處 用於排序,查詢最大最小都非常方便 2.堆的實現 heapexception.h ifndef heapexception h define heapexception h class a...
二叉堆的實現
二叉堆是一種特殊的堆,二叉堆是完全二元樹 二叉樹 或者是近似完全二元樹 二叉樹 二叉堆有兩種 最大堆和最小堆。最大堆 父結點的鍵值總是大於或等於任何乙個子結點的鍵值 最小堆 父結點的鍵值總是小於或等於任何乙個子節點的鍵值。二叉堆一般都通過 陣列 來實現。陣列實現的二叉堆,父節點和子節點的位置存在一定...