王朝百科
分享
 
 
 

最小堆

王朝百科·作者佚名  2011-05-24  
宽屏版  字体: |||超大  

介绍最大堆和最小堆是二叉堆的两种形式。

最大堆:根结点的键值是所有堆结点键值中最大者。

最小堆:根结点的键值是所有堆结点键值中最小者。

而最大-最小堆集结了最大堆和最小堆的优点,这也是其名字的由来。

最大-最小堆是最大层和最小层交替出现的二叉树,即最大层结点的儿子属于最小层,最小层结点的儿子属于最大层。

以最大(小)层结点为根结点的子树保有最大(小)堆性质:根结点的键值为该子树结点键值中最大(小)项。

最小堆的实现一个自实现的优先队列 最小堆 #include

#include

#include

using namespace std;

template

class MinHeap

{

private:

T *heap;

int CurrentSize;

int MaxSize;

void FilterDown(const int start,const int end);

void FilterUp(int start);

public:

MinHeap(int n);

MinHeap();

~MinHeap(){delete []heap;}

bool Insert(const T &x);

T RemoveMin();

T GetMin();

bool IsEmpty() const{return CurrentSize==0;}

bool IsFull() const{return CurrentSize==MaxSize;}

void Clear(){CurrentSize=0;}

};

template

MinHeap::MinHeap()

{

MaxSize=1000;

heap=new T[MaxSize];

CurrentSize=0;

}

template

MinHeap::MinHeap(int n)

{

MaxSize=n;

heap=new T[MaxSize];

CurrentSize=0;

}

template

void MinHeap::FilterDown(const int start,const int end)

{

int i=start,j=2*i+1;

T temp=heap[i];

while(j<=end)

{

if(jheap[j+1])

j++;

if(temp<=heap[j])

break;

else

{

heap[i]=heap[j];i=j;j=2*j+1;

}

}

heap[i]=temp;

}

template

bool MinHeap::Insert(const T &x)

{

if(CurrentSize==MaxSize)

return false;

heap[CurrentSize]=x;

FilterUp(CurrentSize);

CurrentSize++;

return true;

}

template

void MinHeap::FilterUp(int start)

{

int j=start,i=(j-1)/2;

T temp=heap[j];

while(j>0)

{

if(heap[i]<=temp)break;

else

heap[j]=heap[i];j=i;i=(i-1)/2;

}

heap[j]=temp;

}

template

T MinHeap::RemoveMin( )

{

T x=heap[0];

heap[0]=heap[CurrentSize-1];

CurrentSize--;

FilterDown(0,CurrentSize-1);

return x;

}

template

T MinHeap::GetMin()

{

return heap[0];

}

int main ()

{

MinHeap test(8);

int k;

bool tem;

for(k=1;k<=10;k++)

{

tem=test.Insert(10-k);

}

tem=test.IsEmpty();

tem=test.IsFull();

for(k=1;k<=5;k++)

test.RemoveMin();

return 0;

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有