Priority Queue 优先队列

优先队列能够维护出队时的元素最大或最小

什么是优先队列?

优先队列也是一种队列, 同样地主要支持两种操作: 入队 和 出队.

一般的队列满足 FIFO(先进先出) 规则, 而优先队列满足每一次出队的元素 都为整个队列元素的 最小值 或 最大值, 其底层是一个 最小堆 或者是 最大堆

实现一个 最小 优先队列

我们用上一节实现的 最小堆 来实现一个优先队列.

我们定义了一个 优先队列的接口

public interface Queue<E> {

    int getSize();
    boolean isEmpty();
    void enqueue(E e);
    E dequeue();
    E getFront();

}

然后用定义了一个 MinPriorityQueue 类, 实现了 PriorityQueue 接口, 里面用到了 我们自己写的最小堆 MinHeap

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

    private MinHeap<E> minHeap;
    public MinPriorityQueue(){
        minHeap=new MinHeap<>();
    }

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

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

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

    @Override
    public E dequeue() {
        return minHeap.extractMin();
    }

    @Override
    public E getFront() {
        return minHeap.findMin();
    }

}

可以看出有了 堆 以后, 实现 优先队列 变得非常的简单

Last updated

Was this helpful?