优先队列,数组赋不了值
											 程序代码:
程序代码:/*
*优先队列:大根堆
*/
#include<stdio.h>
#include<stdlib.h>
#define MAX_PQ_SIZE 100
#define element_type unsigned int
#define INI_MAX 0
typedef struct heap_struct
{   
    element_type max_heap_size;//堆中最大元素的个数
    element_type size;//存放在堆中的实际元素的个数
    element_type *elements;   
}*PRIORITY_QUEUE;
PRIORITY_QUEUE create_pq(unsigned int max_elements)
{
    PRIORITY_QUEUE H;
    if(max_elements>MAX_PQ_SIZE)
        printf("Priority queue size is too large!\n");
    H=(PRIORITY_QUEUE)malloc(sizeof(struct heap_struct));
    if(NULL==H)
        printf("Out of space!\n");
    /*Allocate the array+one extra for sentinel*/
    H->elements=(element_type *)malloc((max_elements+1)*sizeof(element_type));
    if(NULL==H->elements)
        printf("Out of space!\n");
    H->max_heap_size=max_elements;
    H->size=0;
    H->elements[0]=INI_MAX;//哨兵元素
    return H;
}
bool isEmptyPriorityQueue(PRIORITY_QUEUE H)
{
    return H->size==0;
}
/*H->element[0] is a sentinel*/
void insert(PRIORITY_QUEUE H,element_type x)
{
    unsigned int i;
    if(H->size==H->max_heap_size)
        printf("Prinority queue if full!\n");
    else
    {
        i=++H->size;    /*the position of the new element*/
        while(H->elements[i/2]<x)/*compare with the value of parent node*/
        {
            H->elements[i]=H->elements[i/2];/*swap down*/
            i/=2;/*one level up*/
        }
        H->elements[i]=x;/*the finial position*/
    }
}
element_type delete_max(PRIORITY_QUEUE H)
{
    unsigned int i,child;
    element_type max_element,last_element;
    if(0==H->size)
    {
        printf("Priority queue is empty!\n");
        return H->elements[0];
    }
    max_element=H->elements[1];/*first node is the*/
    last_element=H->elements[H->size--];/*delete one node*/
    for(i=1;i*2<=H->size;i=child)
    {
        /*find bigger child*/
        child=i*2;
        if((child!=H->size)&&(H->elements[child+1]>H->elements[child]))
            child++;
        if(last_element<H->elements[child])/*not yet the biggest*/
            H->elements[i]=H->elements[child];/*child move up*/
        else
            break;/*is the biggest*/
    }
    H->elements[i]=last_element;/*set here*/
    return max_element;
}
element_type topPriorityQueue(PRIORITY_QUEUE H)
{
    if(isEmptyPriorityQueue(H))
    {
        printf("Priority queue is empty!\n");
        return H->elements[0];
    }
    else
        return H->elements[1];
       
}
void printPriorityQueue(PRIORITY_QUEUE H)
{
    unsigned int i;
    while(!isEmptyPriorityQueue(H))
    {
        for( i=0;i<H->size;i++)
            printf("%d",H->elements[i]);           
    }
}   
int main()
{
    PRIORITY_QUEUE pq=NULL;
    unsigned int max_elements;
    printf("please input the number of max_elements:\n");
    scanf("%d",&max_elements);   
    create_pq(max_elements);
    while(max_elements)
    {
        pq->elements[max_elements]=max_elements--;
        insert(pq,pq->elements[max_elements]);
    }
    printf("Priority queue  initializtion finish!");
    printPriorityQueue(pq);
    printf("\n\n");
    return 0;
}										
					
	
 
											





 
	    


