#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define N 1000
typedef int ElementType;
typedef struct HeapNode{
ElementType *array; /*存放元素的数组*/
int length; /*已经有多少元素*/
int capacity; /*容量*/
}*Heap;
Heap initHeap(int capacity);
int parent(int i);
int isEmpty(Heap H);
int isFull(Heap H);
int left(int i);
int right(int i);
void swap(Heap H,int i,int j);
void increaseKey(Heap H,int i,ElementType x);
void heapSort(Heap H);
ElementType front(Heap H);
void heapAdjust(Heap H, int k, int m);
void insert(Heap H,ElementType x);
void pop(Heap H);
ElementType FrontAndPop(Heap H);
int main()
{
Heap H=initHeap(N);
increaseKey(H,1,5);
/* 此处由测试代码自动添加,用于测试Heap initHeap(int capacity)函数,你无需关心具体测试代码*/
return 0;
}
/*你的代码将被放在此处之后,请完成*/
void pop(Heap H){
if(H->length==0) return;
int temp=H->array[H->length--];
int k=1;
int m=H->length;
for(int j=2*k; j<=m; j*=2){
if(j<m && H->array[j]<H->array[j+1]){
j++;
}
if(temp>=H->array[j]){
break;
}
H->array[k]=H->array[j];
k=j;
}
H->array[k]=temp;
}
ElementType frontAndPop(Heap H){
int res=H->array[1];
if(H->length==1){
H->length--;return res;
}
int temp=H->array[H->length--];
int k=1;
int m=H->length;
for(int j=2*k;j<=m;j*=2){