小码哥《恋上数据结构与算法》笔记(十四):优先级队列(Priority Queue)

767 阅读1分钟

我的Github地址

小码哥《恋上数据结构与算法》笔记

极客时间《iOS开发高手课》笔记

iOS大厂面试高频算法题总结

iOS面试资料汇总

一、优先级队列(Priority Queue)

  • 普通的队列是先进先出原则。
  • 优先级队列是按照优先级高低进行出队,比如将优先级最高的元素作为队头优先出队。
  • 使用场景:
    • 医院急诊根据病人病情和挂号时间决定谁先看病。
    • 操作系统的多任务调度,队列元素是任务,优先级是任务类型。

二、优先级队列(Priority Queue)底层实现

  • 通过最大堆来实现优先级队列。
public class PriorityQueue<E> {
    private BinaryHeap<E> heap; // 二叉堆
	
    public PriorityQueue(Comparator<E> comparator) {
        heap = new BinaryHeap<>(comparator);
    }
	
    public PriorityQueue() {
        this(null);
    }
	
    public int size() {
        return heap.size();
    }

    public boolean isEmpty() {
        return heap.isEmpty();
    }
	
    public void clear() {
        heap.clear();
    }

    public void enQueue(E element) {
        heap.add(element); //入队
    }

    public E deQueue() {
        return heap.remove(); //让优先级最高的元素出队
    }

    public E front() {
        return heap.get(); //获取堆顶元素
    }
}