**
堆顶元素出列
**
如果我们将堆顶的元素删除, 那么顶部有一个空节点, 怎么处理???
解决方案:
当插入节点的时候, 我们将新的节点插入到文件尾部. 那么我们来做相反的事情: 我们取出数组的最后一个元素, 将它放到堆顶部, 然后再修复堆属性.
参考:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
#define DEFAULT_CAPCITY 128
typedef struct _Heap
{
int* arr; /* 存储堆元素的数组 */
int size; /* 当前已存储的元素个数 */
int capacity; /* 当前存储的容量 */
}Heap;
bool initHeap(Heap& heap, int* orginal, int size); /* 初始化堆 */
bool insert(Heap& heap, int value); /* 插入元素 */
bool popMax(Heap& heap, int& value); /* 堆顶元素出列 */
static void buildHeap(Heap& heap); /* 建堆 */
static void adjustDown(Heap& heap, int index); /* 将当前节点和子节点调整成最大堆 */
static void adjustUp(Heap& heap, int index); /* 将当前节点和父节点调整成最大堆 */
/**********************************************************
*
* 函数名称: initHeap(初始化堆)
* 功能: 初始化堆
* 被本函数调用的函数清单: insert buildHeap
* 被访问的表: (此项仅对于牵涉到数据库操作的程序)
* 被修改的表: (此项仅对于牵涉到数据库操作的程序)
* 输入参数说明: 第一个: 自定义堆的数据结构 第二个: 数组的首地址(数组名) 第三个: 数组个数
* 对输出的参数的说明:
* 函数返回值: bool类型
*
***********************************************************/
bool initHeap(Heap& heap, int* orginal, int size)
{
int capacity = DEFAULT_CAPCITY > size ? DEFAULT_CAPCITY : size;
heap.arr = new int[capacity];
if (!heap.arr) return false;
heap.capacity = capacity