“test.cpp”
<strong><span style="font-size:18px;">#include<iostream>
using namespace std;
#include<vector>
template<class T>
class Heap
{
public:
Heap(T* arr,size_t size)
{
_arr.reserve(size);
for(size_t i = 0;i < size;i++)
{
_arr.push_back(arr[i]);
}
//数组建堆
for(int i = (_arr.size()-2)/2;i >= 0;--i)
{
AdjustDown(i);
}
}
void Push(const T& data)
{
_arr.push_back(data);
AdjustUp(_arr.size()-1);
}
//pop掉堆顶的数据
void Pop()
{
//先使堆顶数据和最后一个数据交换,然后吧最后一个数据pop掉
swap(_arr[0],_arr[_arr.size()-1]);
_arr.pop_back();
//原先的最后一个数据调至堆顶,然后除堆顶外左右子树还是满足大堆
//所以此时只需要将堆顶的数据向下调整
AdjustDown(0);
}
void Display()
{
for(size_t i = 0;i < _arr.size();i++)
{
cout<<_arr[i]<<" ";
}
cout<<endl;
}
void AdjustD