一、堆
1.基本概念
优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。
堆是优先队列的完全二叉树组织形式。
堆的两个特性:
结构性:用数组表示的完全二叉树;
有序性:任一结点的关键字是其子树所有结点的最大值(或最小值)。
2.堆的基本操作
1)创建
template <class T>
struct Heap
{
T *Ele;
int Size;
int Capacity;
};
template <class T>
Heap<T> *CreateHeap(int Maxsize)
{
Heap<T> *H = new struct Heap<T>;
H->Ele = new T((Maxsize + 1) * sizeof(T));
H->Size = 0;
H->Capacity = Maxsize;
H->Ele[0] = MAXDATA;
return H;
}
2)插入
// 插入结点
template <class T>
void Insert(Heap<T> *H, T x)
{
if (H->Size == H->Cap