zoukankan      html  css  js  c++  java
  • algorithm ch6 priority queque

    堆数据结构的一个重要用处就是:最为高效的优先级队列。优先级队列分为最大优先级队列和最小优先级队列,其中最大优先级队列的一个应用实在一台分时计算机上进行作业的调度。当用堆来实现优先级队列时,需要在队中的每个元素里存储对应的应用对象句柄(handle)。这里对象柄用数组下标表示,因为在堆操作中,堆元素会改变在数组中的位置,所以具体实现中为了重新定义堆元素,我们需要更新应用对象中的数组下标。简单的实现代码如下:

    int  HeapMaximum(int a[], int &heapSize)
    {
        return a[1];
    }
    int HeapExtractMax(int a[], int &iHeapSize)
    {
        if(iHeapSize < 1)
        {
            cout << "heap underflow." << endl;
        }
        int iMax = a[1];
        a[1] = a[iHeapSize];
        iHeapSize = iHeapSize - 1;
        MaxHeapify(a, 1, iHeapSize);
        return iMax;
    }
    void HeapIncreaseKey(int a[], int iPos, int iKey)
    {
        if(iKey < a[iPos])
        {
            cout << "new key is smaller than current key." << endl;
            return;
        }
        a[iPos] = iKey;
        while(iPos > 1 && a[parent(iPos)] < a[iPos])
        {
            swap(a[iPos], a[parent(iPos)]);
            iPos = parent(iPos);
        }
    }
    void MaxHeapInsert(int a[], int iKey, int &iHeapSize)
    {
        iHeapSize += 1;
        a[iHeapSize] = -INT_MAX;
        HeapIncreaseKey(a, iHeapSize, iKey);
    }


    同时还找到一份不错的学习代码http://www.cnblogs.com/Anker/archive/2013/01/23/2873951.html

    好好学习,总会有收获。

  • 相关阅读:
    项目目标文档
    系统利益相关者描述案例
    软件需求模式 读书笔记二
    软件需求分析 读书笔记1
    专业实训题目需求分析
    2015年秋季个人阅读计划
    CodeVs 1615 数据备份
    HDU 3900 Unblock Me
    HDU 5898 odd-even number
    HDU 5877 Weak Pair
  • 原文地址:https://www.cnblogs.com/bestwangjie/p/4374897.html
Copyright © 2011-2022 走看看