基于堆实现优先队列

通过最大堆的底层实现优先队列是极其容易的,几乎所有的接口都可以直接复用。

队列接口

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();
    }

}

猜你喜欢

转载自blog.csdn.net/wankcn/article/details/106679204