最优队列就是靠堆实现的,普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-out)的行为特征。也就最优队列可以保证队头一定是有限度最大的元素。一个优先队列一般满足以下几个操作:
INSERT(S,x):把元素x插入集合S中
MAXIMUM(S):返回S中具有最大关键字的元素
EXTRACT-MAX(S):去掉并返回S中具有最大关键字的元素
INCREASE-KEY(S,x,k):将元素x的关键字增加到k,这里假设k的值不小于x的关键字值
#include<iostream>
#include<algorithm>
#define maxsize 5000
using namespace std;
int heapsize;
int HeapMaximum(int a[])//返回优先队列中关键字最大的元素
{
return a[1];
}
void MaxHeapify(int a[], int i)//维护最大堆
{
int left = 2 * i;
int right = 2 * i + 1;
int largest;
if (left<=heapsize&&a[i] < a[left])
largest = left;
else
largest = i;
if (right<=heapsize&&a[largest] < a[right])
largest = right;
if (largest != i)
{
swap(a[i], a