堆优先级队列

优先级队列可以用堆表示。在一个给定的作业调度或者基于事件驱动的模型中,优先级队列的元素对应着应用中的对象。通常,我们需要确定一个给定的队列中元素所对应的应用对象。当用堆来实现优先级队列时,需要在堆中的每个元素里存储对应应用对象的柄(handle)。下面讨论如何实现基于堆的最大优先级队列。

#include <iostream>  
using namespace std;  
int size=0;
void Maxheapify(int A[],int i){  
    int left=2*i,right=2*i+1,largest;  
    if (left<=size&&A[left]>A[i])  
    {  
        largest=left;  
    }   
    else  
    {  
        largest=i;  
    }  
    if (right<=size&&A[right]>A[largest])  
    {  
        largest=right;  
    }   
    if (largest!=i)  
    {  
        int temp=A[i];  
        A[i]=A[largest];  
        A[largest]=temp;  
        Maxheapify(A,largest);  
    }  
}  
/*从堆中取出最大值*/
int HeapMax(int A[]){
	if (size<1)
	{
		return 0;
	}
	int max=A[1];
	A[1]=A[size-1];
	Maxheapify(A,1);
	return max;
}
/*堆插入*/
void Heapinsert(int A[],int key){
	int i=++size,temp;
	A[i]=key;
	while (i>1&&A[i/2]<A[i])
	{
		temp=A[i];
		A[i]=A[i/2];
		A[i/2]=temp;
		i=i/2;
	}
}
int main(){  
    int A[11];  
	Heapinsert(A,5);
	Heapinsert(A,1);
	Heapinsert(A,8);
    Heapinsert(A,10);
    for (int i=1;i<=4;i++)  
    {  
        cout<<A[i]<<endl;  
    }  
    return 0;  
}  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值