双端队列
在Java SE6中,引入了Deque接口,并由ArrayDeque和LinkedList两个类实现,都提供了双端队列,并且可以在必要时增加队列的长度,不支持在队列中间添加元素。
Priority queue
优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索,无论何时调用remove方法,总会获得当前优先级队列中最小的元素。优先级队列并没有对所有的元素进行排序,而是使用了数据结构中的堆(heap),heap是一个可以自我调整的二叉树,对树执行add和remove操作,可以让最小的元素移动到根,而不必花费时间对元素进行排序。
使用优先级队列的典型示例是任务调度,每一个任务有一个优先级,任务以随机顺序添加到队列中,每当启动一个新任务时,都将优先级最好的任务从队列中删除(习惯将1设为“最高”,所以会将最小的元素删除)
下面程序显示了一个正在运行的优先级队列,与TreeSet中的迭代不同,这里的迭代并不是按照元素的排列顺序访问的,而删除却总是删掉剩余元素中优先级最小的元素。
public class PriorityQueueTest
{
public static void main(String[] args)
{
PriorityQueue<GregorianCalendar> pq = new PriorityQueue<GregorianCalendar>();
pq.add(new GregorianCalendar(1906, Calendar.DECEMBER, 9)); // G. Hopper
pq.add(new GregorianCalendar(1815, Calendar.DECEMBER, 10)); // A. Lovelace
pq.add(new GregorianCalendar(1903, Calendar.DECEMBER, 3)); // J. von Neumann
pq.add(new GregorianCalendar(1910, Calendar.JUNE, 22)); // K. Zuse
System.out.println("Iterating over elements...");
for (GregorianCalendar date : pq)
System.out.println(date.get(Calendar.YEAR));
System.out.println("Removing elements...");
while (!pq.isEmpty())
System.out.println(pq.remove().get(Calendar.YEAR));
}
}
分享到:
相关推荐
算法中优先级队列问题...用堆排序的算法来做的例子
车道Lane包提供队列,优先级队列,堆栈和双端队列数据结构的实现。 它的设计考虑了简单性,性能和并发使用。优先队列Pqueue是堆优先级队列数据结构的实现。 它可以是最大订购量还是最小订购量,是否已同步以及对于...
优先级队列的实现,包括堆的实现,最大堆的生成
C++ 中”priority_queue” 优先级队列实例详解 1. 简介 标准库队列使用了先进先出(FIFO)的存储和检索策略. 进入队列的对象被放置在尾部, 下一个被取出的元素则取自队列的首部. 标准库提供了两种风格的队列: FIFO ...
优先级队列为大小堆的结构
TaskPriority 优先级的标准如下: TaskPriority.LOW < TaskPriority.DEFAULT < TaskPriority.HIGH 当优先级相同 按照插入次序排队 默认优先级是 TaskPriority.DEFAULT 任务 任务种类可分为 2 种,分别是 执行时间...
priority_queue 是 STL 中的一种容器,可以实现优先级队列的功能。下面,我们将详细介绍 priority_queue 的使用方法和实现原理。 priority_queue 的基本概念 priority_queue 是一种特殊的队列,它可以自动对元素...
与普通队列遵循“先进先出”(FIFO)原则不同,优先级队列依据元素的优先级进行出队操作,而不是按照它们被插入的顺序。优先级高的元素会优先被处理,这使得这种数据结构特别适合处理紧急任务或者高优先级的任务。 ...
优先队列(Priority Queue)是一种抽象数据类型,它类似于常规的队列或栈,但每个元素都有一定的优先级。在优先队列中,元素的出队顺序不是按照它们进入队列的顺序,而是根据它们的优先级来确定。具有高优先级的元素...
CPU的优先级调度算法是一种通过为不同任务分配优先级来决定执行顺序的调度策略。这种算法使得系统能够优先处理那些被认为更重要或紧急的任务,从而提高整体效率和响应速度。然而,优先级调度也可能带来一些问题,...
Redis优先级队列 redis-priority-queue是一个简单的工作队列,类似于具有以下新增功能: 可以添加具有优先级的项目(介于-9007199254740992和9007199254740992之间) 队列会自动进行重复数据删除(重复的项目在推送...
本文将深入探讨两种重要的调度算法:多级反馈队列算法(Multi-Level Feedback Queue, MLFQ)和静态优先级优先算法(Static Priority Scheduling)。这两种算法在实现任务调度时有着各自的特点和优势,并且在C或C++...
优先队列(Priority Queue)是数据结构中的一种特殊队列,它的主要特点是元素的出队顺序不是按照“先进先出”(FIFO)的原则,而是根据每个元素的优先级来决定。这种数据结构广泛应用于各种算法和系统设计中,如事件...
优先级队列是一种特殊的线性数据结构,它在处理元素时遵循特定的优先级规则,通常最高优先级的元素会被最先处理。在Java中,优先级队列是通过`java.util.PriorityQueue`类来实现的,它基于一个二叉堆(Binary Heap)...
数据结构与算法之优先级队列 优先级队列(Priority Queue)是一种特殊的队列,它不同于一般的先进先出队列,而是每次从队列中取出的是具有最高优先权的元素。优先级队列的实现方式有多种,可以基于有序顺序表、无序...
在C++编程语言中,`priority_queue`是一个非常有用的数据结构,它实现了优先级队列的概念。优先级队列不同于传统的FIFO(先进先出)队列,它遵循的是最大优先级原则,即每次从队列顶部弹出优先级最高的元素。在标准...
同样,`priority_queue_enqueue` 的实现会涉及调整二叉堆以保持优先级规则,这通常涉及到插入元素后向上调整的过程,确保新插入的元素在其父节点之上(如果遵循最大优先级规则)。 总的来说,优先队列的C语言实现...
3. **优先级队列(Priority Queue)**:通过`queue.PriorityQueue(maxsize)`创建,元素按照优先级顺序出队,优先级越高,元素越先被处理。队列中的元素通常需要是可比较的,比如整数或自定义对象,其中定义了`__lt__...
C++中的优先队列(Priority_queue)是一种特殊的数据结构,它遵循“大顶堆”或“小顶堆”的原则,即队列中的元素总是按照优先级进行排序。在这个实例中,我们关注的是如何在C++环境中,特别是使用Visual C++ 2008 ...