堆結構的C 模板類實現

2021-07-13 01:54:32 字數 982 閱讀 5646

資料結構中堆的概念不同於「堆疊」,它是指一種完全二叉樹,這種二叉樹的任一節點的關鍵字大於(或小於)其子樹的所有節點,即最大堆(最小堆)。堆結構的構建採用陣列表示,與之前的二叉樹的線性儲存結構類似,主要成員函式包括插入、刪除根節點等函式。插入數值時直接在陣列的尾端增加元素,從尾端開始往上迭代判斷是否滿足堆的有序性條件。刪除根節點函式,將根節點關鍵字返回,同時將陣列的最後乙個元素置於根節點,從根節點開始往下迭代判斷是否都滿足有序性條件,具體來說從左右兒子中選擇比較大的乙個和該值比較,不滿足條件時就交換。在學習完二叉搜尋樹和平衡二叉樹之後,堆就顯得異常簡單了。

#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...