基於堆實現優先隊列

通過最大堆的底層實現優先隊列是極其容易的,幾乎所有的接口都可以直接複用。

隊列接口

Queue.java

// 隊列接口支持泛型
public interface Queue<E> {
    void enqueue(E e);   // 入隊

    E dequeue();      // 出隊

    E getFront();      // 查看隊首

    int getSize();       // 查看大小

    boolean isEmpty();   // 是否爲空
}

優先隊列

在這裏使用的底層二叉堆是《基於動態數組實現二叉堆》中實現的MaxHeap類
PriorityQueue.java

public class PriorityQueue<E extends Comparable<E>> implements Queue<E> {

    private MaxHeap<E> maxHeap;

    public PriorityQueue() {
        maxHeap = new MaxHeap<>();
    }

    @Override
    public int getSize() {
        return maxHeap.size();
    }

    @Override
    public boolean isEmpty() {
        return maxHeap.isEmpty();
    }

    @Override
    public E getFront() {
        return maxHeap.findMax();
    }

    @Override
    public void enqueue(E e) {
        maxHeap.add(e);
    }

    @Override
    public E dequeue() {
        return maxHeap.extractMax();
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章