6.5 优先级队列
int heap_maximum(int A[])
{
return A[1];
}
int heap_extract_max(int A[], int *heapsize)
{
int max = A[1];
A[1] = A[*heapsize];
*heapsize -= 1;
max_heapify(A, *heapsize, 1);
return max;
}
{
A[i] = key;
while (i > 1 && A[PARENT(i)] < A[i]) {
exchange(A, i, PARENT(i));
i = PARENT(i);
}
}
void max_heap_insert(int A[], int *heapsize, int key)
{
*heapsize += 1;
heap_increase_key(A, *heapsize, key);
}
int heap_delete(int A[], int *heapsize, int i)
{
int key = A[i];
int last = A[*heapsize];
*heapsize -= 1;
if (last <= A[PARENT(i)]) {
A[i] = last;
max_heapify(A, *heapsize, i);
}
else {
heap_increase_key(A, i, last);
}
return key;
}
int main(void)
{
int A[20] = { 0, 16, 4, 10, 14, 7, 9, 3, 2, 8, 1 };
int heapsize = 10;
build_max_heap(A, heapsize);
print(A, heapsize);
heap_extract_max(A, &heapsize);
print(A, heapsize);
heap_delete(A, &heapsize, 1);
print(A, heapsize);
return 1;
}