数据结构:栈和队列

队列

分类

  • 普通队列。
  • 优先队列。
  • 以广义队列的角度来看,栈也可以理解为一个队列。

优先队列

普通队列是FIFO的。优先队列的出队顺序与入队顺序无关,和优先级相关。

为什么要用

动态选择优先级最高的任务执行。

概述

与普通队列的最大区别是出队的操作。

实现

接口

  • 入队与其他队列无区别。
  • 出队需要找出优先级最高的元素。

底层数据结构

  • 普通线性结构。入队O(1)出队O(N)。
  • 顺序线性结构。使用排序好的线性结构,入队O(lg n)出队O(1)。
  • 堆。入队O(lg n)出队O(lg n)。

适用性

在N个元素选出前M个元素。在1000000个元素选出前100名。

Java

Java当中的优先队列:PriorityQueue<E>。

参考