堆(heap)的定義:子節點總是不大於或不小於根節點的一顆完全二叉樹。(附完全二叉樹定義:除最後一層外,所有層的節點數都達到最大,最後一層只缺少右側的若干節點,即完全充滿,且是從左向右填充)
最大堆(大頂堆):子節點總是不大於根節點;最小堆(小頂堆):子節點總是不小於根節點;
對於陣列a和節點t,具有以下幾個屬性:
1)parent(t):節點t的父節點,即floor(t/2);.
2)right(t):
3)left(t):
4)a.heap_size:陣列a中堆元素的個數
5)a.length:陣列a中陣列元素的個數,與a.heap_size的區別是未必都有效,有0<=a.heap_size<=a.length
堆的幾個函式:(都以最大堆為例
)1)heapify(a,t):當left(t)和right(t)都是最大堆時,節點t的插入可能會導致其不為最大堆,需要呼叫heapify保證堆的性質。演算法流程如下:
比較a(t)和a(left(t))和a(right(t))的大小,如果發生了轉換,則遞迴呼叫heapify(a,largest);
2)build-max-heap(a):構造最大堆,方法是從a.length/2點開始遞減到1,對每個節點計算heapify。原理是可證明a.length/2到a.length都是a的葉子節點,而迴圈對根節點呼叫heapify函式,可以構造最大堆;
資料結構 堆
最大堆 最小堆 堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點...
資料結構 堆
資料結構 堆的操作和實現 當應用優先順序佇列或者進行堆排序時,一般利用堆來實現。堆是乙個完全 除最底層 外都是滿的 二叉樹,並滿足如下條件 1 根結點若有子樹,則子樹一定也是堆。2 根結點一定大於 或小於 子結點。因為要求堆必須是完全二叉樹,所以可以用線性的資料結構,比如陣列,來實現堆。利用陣列實現...
資料結構 堆
堆常用來實現優先佇列,在這種佇列中,待刪除的元素為優先順序最高 最低 的那個。在任何時候,任意優先元素都是可以插入到佇列中去的,是電腦科學中一類特殊的資料結構的統稱 最大 最小 堆是一棵每乙個節點的鍵值都不小於 大於 其孩子 如果存在 的鍵值的樹。大頂堆是一棵完全二叉樹,同時也是一棵最大樹。小頂堆是...