【数据结构】优先级队列的实现

前端之家收集整理的这篇文章主要介绍了【数据结构】优先级队列的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

建立PriorityQueue.hpp:

#define_CRT_SECURE_NO_WARNINGS1
#include<iostream>
usingnamespacestd;
#include<assert.h>
#include<vector>


template<classT>
structLess
{
booloperator()(constT&l,constT&r)
{
returnl<r;
}
};

template<classT>
structGreater
{
booloperator()(constT&l,constT&r)
{
returnl>r;
}
};


template<classT,template<class>classCompare=Less>
classHeap
{
public:
Heap()
:_a(NULL)
{}


Heap(constT*a,size_tsize)
{
for(inti=0;i<size;i++)
{
_a.push_back(a[i]);
}
for(inti=(size-2)/2;i>=0;i--)
{
_adjustDown(i);
}
}


void_adjustDown(size_tparent)
{
Compare<T>com;
size_tchild=2*parent+1;
size_tsize=_a.size();
while(child<size)
{
if(child+1<size&&com(_a[child+1],_a[child]))
{
++child;
}
if(com(_a[child],_a[parent]))
{
swap(_a[child],_a[parent]);
parent=child;
child=2*parent+1;
}
else
{
break;
}
}
}


voidPush(constT&x)
{
_a.push_back(x);
_adjustUp(_a.size()-1);
}


void_adjustUp(size_tchild)
{
intparent=(child-1)/2;
Compare<T>com;
while(child>0)
{
if(com(_a[child],_a[parent]))
{
swap(_a[parent],_a[child]);
child=parent;
parent=(child-1)/2;
}
else
{
break;
}
}
}


size_tSize()
{
size_tsize=_a.size();
returnsize;
}


boolEmpty()
{
assert(Size()>=0);
returnSize()==0;
}


voidPop()
{
assert(_a.Size()>0);
swap(_a[0],_a[Size-1]);
_a.pop_back();
_adjustDown(0);
}


T&GetTop()
{
return_a[0];
}


voidPrint()
{
cout<<"大堆序列:"<<endl;
for(inti=0;i<_a.size();i++)
{
cout<<_a[i]<<"";
}
cout<<endl;
}
public:
vector<T>_a;
};


template<classT,template<class>classCompare=Less>
classPriorityQueue
{
public:
voidPush(constT&x)
{
_hp.Push(x);
}


voidPop()
{
_hp.Pop();
}


size_tSize()
{
return_hp.Size();
}


boolEmpty()
{
_hp.Empty();
}


T&Top()
{
return_hp.GetTop();
}


voidPrint()
{
_hp.Print();
}
private:
Heap<T,Compare>_hp;
};

建立PriorityQueue.cpp文件

#define_CRT_SECURE_NO_WARNINGS1
#pragmaonce
#include"PriorityQueue.hpp"

voidTest()
{
inta[]={10,11,13,12,16,18,15,17,14,19};
PriorityQueue<int,Greater>pq;
pq.Push(10);
pq.Push(11);
pq.Push(13);
pq.Push(12);
pq.Push(16);
pq.Push(18);
pq.Push(15);
pq.Push(17);
pq.Push(14);
pq.Push(19);

pq.Print();
}


intmain()
{
Test();
system("pause");
return0;
}

猜你在找的数据结构相关文章