《算法导论》学习总结 — 5.第六章(2) 优先级队列
上一章总结是的堆排序算法,这一章同样是利用了堆这种数据结构,实现在是优先级队列。
根据堆分为最大堆,最小堆,所以优先级队列也可以分为最大优先级队列和最小优先级队列。
优先级队列的概念和用途书上已经写的很清楚了,我就不再打一遍了。直接写出具体实现。
在实现前先说几点:
1.上一章说过,堆的length和heapsize要区分清楚,这一章的优先级队列里就用到了。
2.优先级队列用到了上一章的一些函数比如MaxHeapify(),不记得的可以复习下上一章。
以下是代码及讲解(此处实现的是最大优先级队列):
// 堆应用之优先级队列
// Tanky Woo
// Blog: www.WuTianQi.com
#include <iostream>
using namespace std;
const int INF = 999999;
/////////////////////////////////////////////////////////
////////////// 以下代码在堆排序中已讲解过 ///////////////
void MaxHeapify(int *a, int i, int len)
{
int lt = 2*i, rt = 2*i+1;
int largest;
if(lt <= len && a[lt] > a[i])
largest = lt;
else
largest = i;
if(rt <= len && a[rt] > a[largest])
largest = rt;
if(largest != i)
{
int temp = a[i];
a[i] = a[largest];
a[largest] = temp;
MaxHeapify(a, largest, len);
}
}
void BuildMaxHeap(int *a, int size)
{
for(int i=size/2; i>=1; --i)
MaxHeapify(a, i, size);
}
void PrintArray(int data[], int size)
{
for (int i=1; i<=size; ++i)
cout <<data[i]<<" ";
cout<< endl << endl;
}
////////////////////////////////////////////////////////////
//补充:综合编程 , 其他综合 ,