模板优先级队列,数组实现,再熟悉一下常用算法,同时简单的堆排序应用
写了一个是队列自增长,另一个为了演示我还添加了一个叫做FillPq的方法,这个方法可以使用一个数组直接填充到优先级队列里,此时,优先级队列并不优先,然后进行下滤调整,之后建堆完成,输出即可
#include “stdafx.h”
template< class T>
class PriorityQueue
{
private:
T *pq;
int N;
int capacity;
public:
PriorityQueue(void);
~PriorityQueue(void);
void Insert(T x);
T DelTop();
void Swim(int k);
void Sink(int k);
bool Less(int i,int j);
void Swap(int i,int j);
bool Resize();
void FillPq(T arr[],int size);
};
template< class T>
void PriorityQueue
{
N=size;
capacity=2*size;
for (int i=0;i
pq[i+1]=arr[i];
}
}
template< class T>
PriorityQueue
{
pq=new T[10];
N=0;
capacity=10;
}
template< class T>
void PriorityQueue
{
if (N==capacity)
{
Resize();
}
pq[++N]=x;
Swim(N);
}
template< class T>
T PriorityQueue
{
T max=pq[1];
Swap(1,N—);
Sink(1);
pq[N+1]=NULL;
return max;
}
//下滤
template< class T>
void PriorityQueue
{
while (2k<=N)
{
int j=2k;
if (j
j++;
}
if (!Less(k,j))
{
break;
}
Swap(k,j);
k=j;
}
}
//上浮
template< class T>
void PriorityQueue
{
while (k>1 && Less(k/2,k))
{
Swap(k,k/2);
}
}
template< class T>
void PriorityQueue
{
T temp=pq[i];
pq[i]=pq[j];
pq[j]=temp;
}
template< class T>
bool PriorityQueue
{
return pq[i]
template< class T>
bool PriorityQueue
{
T newPq=new T[capacity2];
capacity=capacity*2;
for (int i=1;i<=N;i++)
{
newPq[i]=pq[i];
}
pq=newPq;
return true;
}
template< class T>
PriorityQueue
{
}
然后是堆排序
#include “stdafx.h”
include
include
include “PriorityQueue.cpp”
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
PriorityQueue
int arr[8]={1,2,4,3,6,8,7,5};
maxPq.FillPq(arr,8);
//建堆
for (int i=4;i>0;i--)
{
maxPq.Sink(i);
}
//输出
for (int i=1;i<=8;i++)
{
cout<<maxPq.DelTop();
}
}
电神魔傀2街机免费版 官方版v1.2.1
下载三国战纪2手游腾讯渠道服 安卓版v2.41.0.0
下载三国战纪2手游抖音渠道服 安卓版v2.41.0.0
下载三国战纪2折扣服 安卓版v2.41.0.0
下载叫我大掌柜小米版 安卓版v7.4.4
叫我大掌柜小米版是这款模拟经营类手游的渠道服版本,在此版本中
cooking fever正版 安卓最新版v23.0.2
cooking fever正版是一款非常好玩的模拟经营类手游
咖啡厅的生活故事 最新版v1.7
咖啡厅的生活故事是一款模拟经营游戏,玩家们在游戏中可以经营一
迅猛龙模拟器金币不减反增版 v1.1.8
迅猛龙模拟器无限金币版是一款动物模拟类游戏,玩家们将在游戏中
泽塔奥特曼升华器免广告版 v1.4
泽塔奥特曼升华器去广告版是游戏的破解版本,在该版本中为玩家去