优先队列、堆和图的深入解析
1. 优先队列概述
优先队列是一种抽象数据类型,其访问协议独特,仅能访问最高优先级的元素。“最高优先级”的定义因应用场景而异。
- 应用场景举例
- 公司秘书工作安排 :小公司中,秘书处理工作的顺序依据员工在公司的重要程度,总裁的工作优先于副总裁,营销总监的工作优先于普通程序员。
- 电话应答系统 :按照来电的先后顺序应答,等待时间最长的电话优先级最高,此时先进先出(FIFO)队列可视为一种优先队列。
- 共享打印机 :配置为优先打印队列中最小的任务,这样打印少量页面的用户无需等待大任务完成。
2. 优先队列的逻辑层面
优先队列抽象数据类型(ADT)定义的操作包括入队、出队,以及检查队列是否为空或已满。这些操作与第4章讨论的FIFO队列操作类似,但优先队列不遵循“先进先出”原则,总是返回当前入队元素中优先级最高的元素。
以下是Java接口 PriQueueInterface
的规范:
package ch09.priorityQueues;
public interface PriQueueInterface {
public boolean isEmpty();
// Effect: Deter