堆实现最优队列

本文探讨了如何使用堆来实现最优队列,即优先队列。优先队列在元素删除时遵循最高优先级原则,确保队头总是具有最大关键字的元素。介绍了包括INSERT、MAXIMUM、EXTRACT-MAX和INCREASE-KEY在内的基本操作。
摘要由CSDN通过智能技术生成

最优队列就是靠堆实现的,普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值