資料結構之java實現的最大堆

2021-09-19 10:06:40 字數 1829 閱讀 3166

二叉堆是乙個完全二叉樹,區別於滿二叉樹。

當二叉堆的任意結點的值不大於其父親結點的值,那麼這個堆就是最大堆。

最大堆是堆的兩種形式之一。

根結點(亦稱為堆頂)的關鍵字是堆裡所有結點關鍵字中最大者,稱為大根堆,又稱最大堆(大頂堆)。

大根堆要求根節點的關鍵字既大於或等於左子樹的關鍵字值,又大於或等於右子樹的關鍵字值。

最大堆下層元素的值不一定小於上層元素的值。如下圖:

由於最大堆是二叉堆,二叉堆又是乙個滿二叉樹,用線性結構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...