主要用於動態資料的維護
二叉堆又分為最大堆個最小堆
最大堆:必須是乙個完全二叉樹,堆中的節點不大於其父節點的值。
完全二叉樹:
除了最後一層節點的個數以外,其它層節點的個數必須是最大值(滿的)。最後一層的節點數雖然可以不是最大數,但必須全部靠左。
#include #include using namespace std;
/*當容量不足時記得開闢新的空間(以下**沒寫)
*/templateclass maxheap
}/*堆頂元素出堆,用最後乙個元素放到堆頂的位置,然後向下shiftdown,比叫兩個子節點的值,跟大的值交換*/
void shiftdown(int k)
if(data[k] >= data[j])
swap(data[k], data[j])
k=j;}}
public:
//開闢空間
maxheap(int capacity)
//析構
~maxheap()
int size()
bool empty()
void insert(item item)
int extractmax()
};int main()
return 0;
}
堆的基本實現
今天講棧,棧的基本操作是入棧和出棧,棧的特點是先進後出。同時在進棧的時候注意棧是否是滿的,出棧的時候注意棧是否是空的。直接上 棧的類實現 使用類模板來實現 template class stack template void stack print int index template bool s...
堆的基本操作
堆的基本概念 如果有乙個關鍵碼的集合k 把它的所有元素按完全二叉樹的順序儲存方式儲存在乙個一維陣列中,並滿足 ki k2 i 1 且 ki k2 i 2 ki k2 i 1 且 ki k2 i 2 i 0,1,2 則稱為小堆 或大堆 如下圖 分別為小堆和大堆 堆的操作具體 如下 測試環境 vs201...
堆的基本操作
堆的資料結構 對於堆,有最大堆和最小堆,在定義乙個堆的時候用乙個陣列表示堆,同時為了方便定義堆的大小,用乙個 size 表示堆的有效元素,同時為了區別最大堆和最小堆,我們用乙個函式指標表示這個堆是最大堆還是最小堆.typedef int compare heaptype parent,heaptyp...