Java Min-Heap实现优先级队列 - 迭代

时间:2015-12-09 16:00:05

标签: java implementation priority-queue

我正在尝试使用此代码来实现优先级队列。关于网站上的这个实现有很多问题,但是考虑到你可以编写代码来执行基本相同的事情有多少种不同的方法,在查看了一些其他示例之后我仍然感到茫然。

此代码中有一些缺失的行,但我仅限于编辑四条标记的行,因此我发现自己陷入了一个特定方面。我似乎无法理解'数量'是如何增加的。

从我的理解main创建了一个maxSize = 5的新对象。然后调用insertItem方法传递值130.这应该放在root中(我把queArray [quantity] = item;放到第一个空白中)此时insertItem方法退出,然后使用下一个值再次调用。那么'数量'在什么时候递增?也许我错过了一些非常简单的东西,或者也许还有另一种方法可以解决这个问题,这对于像我这样的初学者来说可能并不明显或者不为人所知?

我认为你会想要在初始if语句下增加数量,但这似乎不是一个选项,所以据我所知,else语句永远不会被执行,因为数量不会改变。我知道我不对,但我不知道如何,一些帮助将不胜感激。

public class Main {

    /**
     * @param args the command line arguments
     */
    // array in sorted order, from max at 0 to min at size-1
    private int maxSize;
    private long[] queArray;
    private int quantity;

    public Main(int s) {
        maxSize = s;
        queArray = new long[maxSize];
        quantity = 0;
    }

    public void insertItem(long item) {
        int i;

        if (quantity == 0)
            __________; // insert at 0
        else
        {
            for (i = quantity - 1; i >= 0; i--) // start at end,
            {
                if (item > queArray[i]) // if new item larger,
                    __________; // shift upward
                else
                    // if smaller,
                    break; // done shifting
            }
            __________; // insert it
            __________;
        } // end else (quantity > 0)
    }

    public boolean PQEmpty(){
        return (quantity == 0);
    }

    public long removeItemPQ(){
        return queArray[--quantity];
    }

    public long peekMin(){
        return queArray[quantity - 1];
    }

    public static void main(String[] args) {
        Main thePQ = new Main(5);
        thePQ.insertItem(130);
        thePQ.insertItem(450);
        thePQ.insertItem(110);
        thePQ.insertItem(430);
        thePQ.insertItem(280);

        while (!thePQ.PQEmpty()) {
            long item = thePQ.removeItemPQ();
            System.out.print(item + " ");
        }
        System.out.println("");
    }
}

1 个答案:

答案 0 :(得分:0)

这不是我推荐的风格,但您可以使用queArray[quantity++] = item;