#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處。二叉堆有兩種 最大堆和最小堆。最大堆中,除根結點外 其無父結點 每個結點的關鍵字都...
堆與最大堆
這篇部落格主要敘述最大堆 資料結構中的堆和作業系統的堆有點不太一樣 作業系統的堆大多用鍊錶的形式,而資料結構中的堆使用的是完全二叉樹.既然它是乙個完全二叉樹,因此就有一下性質 葉節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹 來自度娘 也就是說,增加結點時只能...