make_heap函数用来从给定的任意顺序的数组创建一个最大堆。
push_heap函数向堆中压入一个新的数据,并维持堆的形态。
pop_heap函数取出堆中最大的元素,并将该元素从堆结构中剔除,维持堆的形态。
使用了定长数组作为基本的存储数据的结构,当数组空间满时,重新申请一个两倍长于当前数组的新数组,将元素复制过去。
heap.cpp
class heap
{
private:
int *_A;
int _size; //当前元素数量
int _max_size; //所能容纳的最大数量
void _adjust_heap(int i)
{
int left = 2 * i + 1;
int right = 2 * i + 2;
int largest;
//选出三个节点中最大的元素,将他放到根节点中
if(left <= _size - 1 && _A[left] > _A[i])
largest = left;
else
largest = i;
if(right <= _size - 1 && _A[right] > _A[largest])
largest = right;
if(largest != i)
{
int tmp = _A[i];
_A[i] = _A[largest];
_A[largest] = tmp;
_adjust_heap(largest);
}
}
void _double_heap()
{
int *tmp = new int[_size * 2];
for(int i = 0; i < this->_size; i++)