堆结构的C++模板类实现

数据结构中堆的概念不同于“堆栈”,它是指一种完全二叉树,这种二叉树的任一节点的关键字大于(或小于)其子树的所有节点,即最大堆(最小堆)。堆结构的构建采用数组表示,与之前的二叉树的线性存储结构类似,主要成员函数包括插入、删除根节点等函数。插入数值时直接在数组的尾端增加元素,从尾端开始往上迭代判断是否满足堆的有序性条件。删除根节点函数,将根节点关键字返回,同时将数组的最后一个元素置于根节点,从根节点开始往下迭代判断是否都满足有序性条件,具体来说从左右儿子中选择比较大的一个和该值比较,不满足条件时就交换。在学习完二叉搜索树和平衡二叉树之后,堆就显得异常简单了。

//maxheap.h
#ifndef MAXHEAP_H
#define MAXHEAP_H
#include <IOSTREAM>
template<class Type>
class MaxHeap
{
private:
Type* Data;
int Size;
int Capacity;
public:
MaxHeap():Size(0),Capacity(100)
{
Data=new Type[Capacity];
Data[0]=Capacity;
}
~MaxHeap(){}
bool Insert(Type);
Type DeleteMax();
bool IsFull(){return Size==Capacity-1;}
bool IsEmpty(){return Size==0;}
void Print();
};
template<class Type>
bool MaxHeap<Type>::Insert(Type x)
{
if(IsFull())
return false;
for(int i=++Size;i>1&&Data[i/2]<x;i/=2)
{
Data[i]=Data[i/2];
}
Data[i]=x;
return true;
}
template<class Type>
Type MaxHeap<Type>::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]<Data[2*parent+1])
child++;
if(last<Data[child])
Data[parent]=Data[child];
else
break;
}
Data[parent]=last;
return temp;
}
template<class Type>
void MaxHeap<Type>::Print()
{
for(int i=1;i<=Size;i++)
{
std::cout<<Data[i]<<" ";
}
std::cout<<std::endl;
}
#endif

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值