提供一个基于链表的优先级队列,为了简便,只存储整数,假设数值越大,优先级越高。
工作时该队列按照数值的大小排列,出队时出优先级别最高的元素。
这已经不是普通意义上的队列(先进先出),叫优先级队列只是习惯。
put:入队
get:出队
isEmpty:是否为空
普通队列请参见LinkedQueue,Queue
相对与另一个实现(PriorityQueue),这个优先级队列没有容量的限制。
Node是辅助类,提供节点的数据结构,为了简便,没有使用标准的set,get
class Node {
private int value;
private Node next;
Node(int value) {
this.value = value;
}
int value() {
return value;
}
Node next() {
return next;
}
void next(Node next) {
this.next = next;
}
}
class PriorityQueue {
private Node top;
void put(int value) {
Node node = new Node(value);
if(top == null || top.value() <= value) {
node.next(top);
top = node;
} else {
Node temp = top.next();
Node previous = top;
while(temp != null) {
if(temp.value() <= value) break;
previous = temp;
temp = temp.next();
}
node.next(previous.next());
previous.next(node);
}
}
int get() {
assert top != null;
int result = top.value();
top = top.next();
return result;
}
boolean isEmpty() {
return top == null;
}
//测试代码
public static void main(String[] args) {
PriorityQueue q = new PriorityQueue();
assert q.isEmpty();
q.put(10);
q.put(5);
q.put(20);
assert !q.isEmpty();
assert q.get() == 20;
assert q.get() == 10;
assert q.get() == 5;
assert q.isEmpty();
}
}
分享到:
相关推荐
优先级队列的核心特性包括: 1. **数据结构**:PriorityQueue使用二叉堆作为其数据结构,通常是一个最小堆,保证队头元素是最小的。 2. **比较规则**:队列中的元素必须实现Comparable接口,或者在创建队列时提供...
优先级队列cpp文件PriorityQueue.cpp
总结来说,“PriorityQueue-MEX-Matlab”是一个利用MEX技术在MATLAB中实现的优先级队列库,它提供了一套高效的接口,便于在MATLAB环境中进行优先级队列的操作,如插入、删除和查询等。这个项目可能还包括了一些示例...
在Java中,优先级队列是通过`java.util.PriorityQueue`类来实现的,它基于一个二叉堆(Binary Heap)的数据结构。本文将深入探讨优先级队列的概念、实现方式以及如何在实际编程中使用。 首先,理解二叉堆是理解...
优先级队列是一种特殊的数据结构,它按照优先级顺序存储元素,最高优先级的元素总是在队列的前端。在计算机科学中,堆通常被用来实现优先级队列。堆是一种完全二叉树,其中每个父节点的值都大于或等于(最大堆)或...
优先级队列头文件priorityqueue.h
PriorityQueue.m是MATLAB脚本或函数文件,很可能包含了优先级队列的实现代码。license.txt通常包含软件许可信息,说明了这些源代码的使用条件和限制。ignore.txt则可能是Git或版本控制系统中的忽略文件,指定了在...
**PriorityQueue带优先级的队列** `PriorityQueue`是Java集合框架中的一种特殊队列,它基于优先堆实现,可以自动对队列中的元素进行排序。与普通队列不同,`PriorityQueue`不是先进先出(FIFO)的数据结构,而是...
《MatlabPriorityQueue: 为Matlab编写的优先级队列》 在计算机科学中,优先级队列是一种特殊的数据结构,它允许我们按照优先级处理元素,而非按照它们进入队列的顺序。这种数据结构在许多算法和应用中都扮演着关键...
- **内部实现**:Java的`PriorityQueue`类已经实现了小根堆,我们可以通过直接使用这个类来创建优先级队列,如`PriorityQueue<Integer> queue = new PriorityQueue();`,然后可以调用`offer()`、`poll()`等方法进行...
使用C#中的二进制堆的自定义优先级队列实现。为个人/俱乐部项目编写。 (据我所知)它符合大多数.NET标准。不是线程安全的。 信息 这段代码是从Java项目转换为利用C#功能集并在结构上更合理的东西。虽然原始的Java...
以下是一个利用`heapq`实现的优先级队列类`PriorityQueue`: ```python import heapq class PriorityQueue: def __init__(self): self._queue = [] self._index = 0 def push(self, item, priority): heapq....
### Python 实现优先级队列结构的方法详解 #### 一、优先级队列概述 优先级队列(Priority Queue)是一种特殊的数据结构,它能够存储一系列具有不同优先级的元素。这种数据结构允许用户根据元素的优先级进行插入和...
虽然这种方法在性能上可能不如Java内置的`PriorityQueue`类高效,但对于学习理解优先级队列的工作原理和数据结构的实现是一个很好的实践。通过这种方式,我们可以更好地理解优先级队列的核心特性,以及如何通过基本...
这是 C++ STL 优先级队列的 Mexified MATLAB 包装器这个优先队列实现很简单。 然而,它可以用来保存任意对象的“排序”列表。 我们可以只推送它的索引,而不是推送整个对象。 这是通过首先像往常一样将对象存储在 ...
任务的优先队列 基于任务的PriorityQueue的实现在此程序中,用户可以: 注册新任务,并传递名称和优先级 提取并返回列表中优先级最低的任务 清除任务列表 列出所有待处理的任务及其优先级 导入和导出CSV文件中的...
Java中的优先级队列(PriorityQueue)是一种特殊的队列,它按照元素的优先级进行排序。在Java集合框架中,PriorityQueue是位于java.util包下的一个类,它实现了Queue接口,但并不保证按照先进先出(FIFO)的顺序进行...
### Python利用heapq实现优先级队列的方法 在Python中,`heapq`模块提供了一系列操作堆数据结构的函数,可以高效地实现优先级队列。优先级队列是一种特殊的队列,其中每个元素都有一个优先级,较高优先级的元素会先...
在优先级队列的实现中,我们定义了一个`PriorityQueue`类,它具有`push`和`pop`方法。`push`方法用于添加元素到队列中,它将新元素以及其优先级作为参数,并使用`heapq.heappush`函数将新元素添加到最小堆中。因为`...