当前位置:编程学习 > 网站相关 >>

《算法导论》学习总结 — 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;
}
////////////////////////////////////////////////////////////
 
//
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,