資料結構中堆的概念不同於「堆疊」,它是指一種完全二叉樹,這種二叉樹的任一節點的關鍵字大於(或小於)其子樹的所有節點,即最大堆(最小堆)。堆結構的構建採用陣列表示,與之前的二叉樹的線性儲存結構類似,主要成員函式包括插入、刪除根節點等函式。插入數值時直接在陣列的尾端增加元素,從尾端開始往上迭代判斷是否滿足堆的有序性條件。刪除根節點函式,將根節點關鍵字返回,同時將陣列的最後乙個元素置於根節點,從根節點開始往下迭代判斷是否都滿足有序性條件,具體來說從左右兒子中選擇比較大的乙個和該值比較,不滿足條件時就交換。在學習完二叉搜尋樹和平衡二叉樹之後,堆就顯得異常簡單了。
#ifndef maxheap_h
#define maxheap_h
#include templateclass maxheap
~maxheap(){}
bool insert(type);
type deletemax();
bool isfull()
bool isempty()
void print();
};templatebool maxheap::insert(type x)
{if(isfull())
return false;
for(int i=++size;i>1&&data[i/2]type maxheap::deletemax()
{if(isempty())
return type(-1111);
type temp=data[1];
type last=data[size--];
int parent,child;
for(parent=1;2*parent<=size;parent=child)
{child=parent*2;
if(2*parent+1<=size&&data[2*parent]void maxheap::print()
{for(int i=1;i<=size;i++)
{std::cout<
二叉堆的c 模板類實現
我在這篇部落格中介紹了二叉堆的c語言實現。這次,我將使用c 模板類技術實現這個二叉堆,使它能夠儲存更多的資料型別。也就是c 中的通用容器 generic collection 概念。改寫之後我們可以這樣建立乙個heap物件 heaph 在c實現中,必須傳遞乙個結構體例項的指標給函式,以便函式能夠操作...
C 類模板實現大根堆
大根堆是一種樹形的結構,所有父結點都大於子結點,一般用一維陣列表示,若父結點下標為n 開始下標從0開始 則左孩子下標為 2n 1.右孩子為2n 2 堆資料使用stl向量vector儲存 容量vector自動擴充 pragma once include template class t class m...
C 實現堆類
heap.hpp ifndef heap hpp define heap hpp template class t class heap template class t heap heap template class t heap heap int capacity template class...