自己封装的优先队列,堆实现

Posted henserlinda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自己封装的优先队列,堆实现相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#define MAX_H nodes1
#define MIN_H nodes2
#define LL long long

using namespace std;

struct nodes1
{
    LL k;
    bool operator <(const nodes1 &b) const
    {
        return k < b.k;
    }
};

struct nodes2
{
    LL k;
    bool operator <(const nodes2 &b) const
    {
        return k > b.k;
    }
};


template <class TYPE>
class Que
{
public:
    Que()
    {
        len = 0;
    }

    int len;
    TYPE num[30005];

    void adjust_d(TYPE num[], int cur, int n)
    {
        int i = cur,j = i*2+1;
        //printf("ij: %d %d
", i, j);
        //printf("%d
",n);
        while(j < n)
        {
            if(j+1 < n)
                j = num[j]<num[j+1]?j+1:j;

            if(num[i]<num[j])
            {
                swap(num[i],num[j]);
                //printf("swap: %d %d
", i, j);
                i = j;
                j = i*2+1;
            }
            else
                break;
        }
    }

    void adjust_a(TYPE num[], int cur)
    {
        int i = cur,j = (i-1)/2;
        //printf("ij: %d %d
", i, j);
        //printf("%d
",n);
        while(j >= 0)
        {
            if(num[j]<num[i])
            {
                swap(num[i],num[j]);
                //printf("swap: %d %d
", i, j);
                i = j;
                j = (i-1)/2;
            }
            else
                break;
        }
    }

    void push(TYPE tmp)
    {
        num[len++] = tmp;
        adjust_a(num,len-1);
    }

    TYPE top()
    {
        return num[0];
    }

    void pop()
    {
        swap(num[0],num[len-1]);
        len--;
        adjust_d(num,0,len);
    }

    bool empty()
    {
        if(len == 0)
            return true;
        return false;
    }

    int size()
    {
        return len;
    }
};


void solve()
{
    int n,m;
    Que<MAX_H> Q_max; //大顶堆
    Que<MIN_H> Q_min; //小顶堆
}

以上是关于自己封装的优先队列,堆实现的主要内容,如果未能解决你的问题,请参考以下文章

# Java 常用代码片段

# Java 常用代码片段

优先级队列-堆

优先队列的实现(最小堆)

POJ 2051 argus(简单题,堆排序or优先队列)

优先级队列总结