二叉堆 最大堆實現

2021-10-04 19:16:13 字數 1155 閱讀 9640

#include

#include

#include

#include

#include

#include

using

namespace std;

template

<

typename item>

class

maxheap

}void

shiftdown

(int k)

}public

:// 建構函式, 構造乙個空堆, 可容納capacity個元素

maxheap

(int capacity)

// 建構函式, 通過乙個給定陣列建立乙個最大堆

// 該構造堆的過程, 時間複雜度為o(n)

maxheap

(item arr,

int n)

~maxheap()

// 返回堆中的元素個數

intsize()

// 返回乙個布林值, 表示堆中是否為空

bool

isempty()

// 像最大堆中插入乙個新的元素 item

void

insert

(item item)

// 從最大堆中取出堆頂元素, 即堆中所儲存的最大資料

item extractmax()

// 獲取最大堆中的堆頂元素

item getmax()

};// 測試最大堆

intmain()

int* arr =

newint

[n];

// 將maxheap中的資料逐漸使用extractmax取出來

// 取出來的順序應該是按照從大到小的順序取出來的

for(

int i =

0; i < n ; i ++

) cout

for(

int i =

1; i < n ; i ++

)assert

( arr[i-1]

>= arr[i]);

delete

arr;

return0;

}

二叉堆的實現(最大堆)

二叉堆是完全二元樹或者是近似完全二元樹,按照資料的排列方式可以分為兩種 最大堆和最小堆。最大堆 父結點的鍵值總是大於或等於任何乙個子節點的鍵值 最小堆 父結點的鍵值總是小於或等於任何乙個子節點的鍵值。示意圖如下 二叉堆一般都通過 陣列 來實現。陣列實現的二叉堆,父節點和子節點的位置存在一定的關係。索...

二叉堆實現二

堆可以視為一棵完全二叉樹,樹的每一層都是被填滿的,最後一層可能除外,所以堆可以用陣列來表示。對於陣列中任意位置 i上的元素,其左兒子在位置 i 2 1 其右兒子在位置 i 2 2 上,其父節點在位置 i 1 2 1處。二叉堆有兩種 最大堆和最小堆。最大堆中,除根結點外 其無父結點 每個結點的關鍵字都...

堆與最大堆

這篇部落格主要敘述最大堆 資料結構中的堆和作業系統的堆有點不太一樣 作業系統的堆大多用鍊錶的形式,而資料結構中的堆使用的是完全二叉樹.既然它是乙個完全二叉樹,因此就有一下性質 葉節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹 來自度娘 也就是說,增加結點時只能...