typedef int E;
struct MaxHeap {
E *arr;
int size;
int capacity;
};
typedef struct MaxHeap *Heap;
BOOL initHead(Heap heap) {
heap->capacity = 11;
heap->size = 1;
heap->arr = malloc(sizeof(E) * heap->capacity);
return heap->arr != NULL;
}
BOOL insert(Heap heap, E element) {
if (heap->size == heap->capacity) return 0;
int index = heap->size++;
while (index > 1 && heap->arr[index / 2] < element) {
heap->arr[index] = heap->arr[index / 2];
index /= 2;
}
heap->arr[index] = element;
return 1;
}
E delete(Heap heap) {
E Max = heap->arr[1], e = heap->arr[heap->size];
int index = 1;
while (index * 2 < heap->size) {
int child = index * 2;
if (child < heap->size && heap->arr[child] < heap->arr[child + 1])
child++;
if (heap->arr[child] < e) break;
else
heap->arr[index] = heap->arr[child];
index = child;
}
heap->arr[index] = e;
return Max;
}
int main() {
struct MaxHeap heap;
initHead(&heap);
insert(&heap,5);
insert(&heap,2);
insert(&heap,3);
insert(&heap,7);
insert(&heap,6);
insert(&heap,9);
insert(&heap,11);
for (int i = 1; i < 8; ++i) {
printf("%d ", delete(&heap));
}
}