堆优先级队列

优先级队列可以用堆表示。在一个给定的作业调度或者基于事件驱动的模型中,优先级队列的元素对应着应用中的对象。通常,我们需要确定一个给定的队列中元素所对应的应用对象。当用堆来实现优先级队列时,需要在堆中的每个元素里存储对应应用对象的柄(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;  
}  



posted @ 2012-05-19 19:25  应律  阅读(139)  评论(0编辑  收藏  举报