最小二叉堆
来源:互联网 发布:中国的中产阶级 知乎 编辑:程序博客网 时间:2024/05/19 12:36
由于优先队列实在好用,所以我自己也写了一个最小二叉堆,大家可以看看:
#ifndef BHEAP_H
#define BHEAP_H
#include<iostream>
using namespace std;
#include<vector>
template<class Comparable>
class Bheap
{
private:
vector<Comparable> v;
int size;
public:
Bheap(int a=100)
{v.resize(a);
size=0;}
void insert(Comparable x)
{
if(size==v.capacity()-1)
v.resize(2*size);
int hole=++size;
for(;hole>1&&x<v[hole/2];hole/=2)
v[hole]=v[hole/2];
v[hole]=x;
}
void deleteMin()
{
if(isEmpty())
return;
//throw UnderflowException();
v[1]=v[size--];
Comparable x=v[1];
int child;
int i=1;
for(;2*i<=size;i=child)
{
child=i*2;
if(child!=size&&v[child]>v[child+1])
child++;
if(x>v[child])
v[i]=v[child];
else
break;
}
v[i]=x;
}
void deleteMin(Comparable &x1)
{
if(isEmpty())
return ;
// throw UnderflowException();
x1=v[1];
v[1]=v[size--];
Comparable x=v[1];
int child;
int i=1;
for(;2*i<=size;i=child)
{
child=i*2;
if(child!=size&&v[child]>v[child+1])
child++;
if(x>v[child])
v[i]=v[child];
else
break;
}
v[i]=x;
}
bool isEmpty()
{
return size==0;
}
int getsize(){
return size;
}
Comparable &findMin()
{
return v[1];
}
void print1()
{
if(isEmpty())
return;
for(int i=1;i<=size;i++)
cout<<v[i]<<" ";
}
void print2(int i=1)
{
if(isEmpty()||i>size)
return;
cout<<v[i]<<" ";
print2(2*i);
print2(2*i+1);
}
};
#endif
下面是调试代码:
#include"Bheap.h"
#include<iostream>
#include<vector>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{
Bheap<int>H;
int n;
cin>>n;
srand(time(NULL));
for(int i=1;i<=n;i++)
H.insert(rand()%n);
vector<int>a(n);
for(int i=0;i<n;i++)
{
H.deleteMin(a[i]);
cout<<a[i]<<" ";
}
cout<<endl;
/*for(i=1;i<20;i++)
H.deleteMin();
H.print1();*/
return 0;
}
不妨看看!
- 二叉树 最小堆
- 最小二叉堆
- 最小二叉堆
- 二叉树存储 最小堆
- 数据结构二叉堆C++实现 最小堆
- java 实现最小二叉堆排序
- 试写二叉最小堆和最大堆
- 最小优先级队列(基于最小二叉堆算法)
- 堆优先用完全二叉树表示、堆的特性和最大最小堆
- 最小二叉堆代码(基于一整形数组实现)
- VC++2012编程演练数据结构《27》最小堆二叉树
- [Wikioi 1245][二叉堆]最小的N个和
- 最小生成树---prim模板(二叉堆优化)
- 最小堆
- 最小堆
- 最小堆
- 最小堆
- 最小堆
- vim添加和删除块注视
- SYBASE LIST 函数与SQL的合并实现方式
- hellowin -windows菜单编程
- Sencha touch 开发系列:容器组件:dataview,list
- JAXB:XML to JavaBean
- 最小二叉堆
- DDK驱动安装方式
- SNMP协议的7种PDU
- 用 Python 实现简单的机翼周围 C 型计算网格
- webQQ协议——获取好友消息
- C#_引用类型
- Python reduce
- ftp
- 九度:1448<拓扑排序>