双端队列与优先级队列
双端队列(Deque)
双端队列(Double-Ended Queue,简称Deque)是一种允许在两端都进行插入和删除操作的队列。
双端队列的分类
- 输入受限的双端队列:只允许在一端进行插入,两端都可以删除
- 输出受限的双端队列:只允许在一端进行删除,两端都可以插入
- 一般双端队列:两端都可以插入和删除
双端队列与栈、队列的关系
- 如果限制双端队列只能在一端插入和删除,就退化为栈
- 如果限制双端队列只能在一端插入、另一端删除,就退化为普通队列
双端队列结合了栈和队列的优点,非常灵活。在实际应用中,C++ STL中的std::deque就是双端队列的实现,支持在两端高效地插入和删除元素。
优先级队列
优先级队列(Priority Queue)是一种特殊的队列,每个元素都有一个优先级,出队时总是优先级最高的元素先出队,而不是按照入队的顺序。
优先级队列通常用堆(Heap)来实现,入队和出队操作的时间复杂度为 。
优先级队列的典型应用:
- 操作系统的进程调度(按优先级调度进程)
- Dijkstra最短路径算法(选择距离最小的顶点)
- 哈夫曼编码(选择权值最小的两个结点)
- 事件驱动模拟器(按时间顺序处理事件)
