Implement priority queue (实现优先队列)

优先队列:顾名思义,首先它是一个队列,但是它强调了“优先”二字,所以,已经不能算是一般意义上的队列了,它的“优先”意指取队首元素时,有一定的选择性,即根据元素的属性选择某一项值最优的出队~
  优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素
  优先队列是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有1) 查找;2) 插入一个新元素;3) 删除.在最小优先队列(min priority queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素.优先权队列中的元素可以有相同的优先权,查找与删除操作可根据任意优先权进行. 
这里我们实现最大优先队列
#include
#include
#include
#include
void build_max_heap(int a[]);
int heap_maximum(int a[]);
int heap_extract_max(int a[]);
void heap_increase_key(int a[],int i,int key);
void max_heap_insert(int a[],int key);
static int heapsize=0;
static int length=0;
int  main()
{
	printf("请输入数组的大小:");
	scanf("%d",&heapsize);
	int m;
	int* a=(int *)malloc(sizeof(int)*heapsize);
	int i;
	srand((int)time(NULL));
	for(i=0;ia[i])
		largest=l;
	else
		largest=i;
	if((r<=heapsize-1)&&a[r]>a[largest])
		largest=r;
	if(largest!=i)
	{
		int temp=a[i];
		a[i]=a[largest];
		a[largest]=temp;
		max_heapify(a,largest);
	}
}
//建立大顶堆过程
void build_max_heap(int a[])
{
    length=heapsize;
	int i;
	for(i=(length-1)/2;i>=0;i--)
		max_heapify(a,i);
}
int heap_maximum(int a[])
{
	return a[0];
}
int heap_extract_max(int a[])
{
	int max;
	if(heapsize<1)
	{
		printf("heap underflow\n");
		return -1;
	}
	else
	{
		max=a[0];
		a[0]=a[heapsize-1];
		heapsize=heapsize-1;
		max_heapify(a,0);
		return max;
	}

}
void heap_increase_key(int a[],int i,int key)
{
	if(keyheapsize-1)
		printf("new key is smaller than current key\n");
	else 
	{
		a[i]=key;
		while(i>0&&a[parent(i)]


你可能感兴趣的:(算法,C/C++)