package Heap;
import MyInterface.Comparator;
import MyInterface.Queue;
import java.util.NoSuchElementException;
import java.util.Arrays;
public class PriorityQueue<T> implements Queue<T> {
private T[] arr;
private int qSize;
private Comparator<T> comp;
public PriorityQueue() {
comp = new Greater<T>();
qSize = 0;
arr = (T[]) new Object[10];
}
public PriorityQueue(Comparator<T> comp) {
this.comp = comp;
qSize = 0;
arr = (T[]) new Object[10];
}
public boolean isEmpty() {
return qSize == 0;
}
public T peek() {
if(qSize == 0)
throw new NoSuchElementException("empty queue");
return arr[0];
}
public T pop() {
if(qSize == 0)
throw new NoSuchElementException("empty queue");
T top = Heaps.popHeap(arr, qSize, comp);
qSize--;
return top;
}
public void push(T item) {
if(qSize == arr.length)
enlargeCapacity();
Heaps.pushHeap(arr, qSize, item, comp);
qSize++;
}
private void enlargeCapacity() {
int newCapacity = 2 * arr.length;
T[] oldArr = arr;
arr = (T[])new Object[newCapacity];
for (int i = 0; i < qSize; i++)
arr[i] = oldArr[i];
oldArr = null;
}
public int size() {
return qSize;
}
public String toString() {
T[] tmpArr = (T[]) new Object[qSize];
for (int i = 0; i < qSize; i++)
tmpArr[i] = arr[i];
Heaps.heapSort(tmpArr, comp);
return Arrays.toString(tmpArr);
}
}
Test
package Heap;
import MyInterface.*;
public class TestPriorityQueue {
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<Integer>(new Less<Integer>());
pq.push(new Integer(7));
pq.push(new Integer(1));
pq.push(new Integer(9));
pq.push(new Integer(0));
pq.push(new Integer(8));
pq.push(new Integer(2));
pq.push(new Integer(4));
pq.push(new Integer(3));
pq.push(new Integer(6));
pq.push(new Integer(5));
System.out.println(pq.peek()); // 9
System.out.println(pq); // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
while(!pq.isEmpty())
System.out.print(pq.pop() + " "); // 0 1 2 3 4 5 6 7 8 9
}
}
分享到:
相关推荐
在Java中,我们可以使用数组来实现优先队列。这篇文章将探讨如何利用数组实现优先队列,并通过提供的`PriorityQ.java`文件来深入理解其实现原理。 1. **优先队列基本概念** 优先队列是一种数据结构,它维护了一个...
3. **自定义优先队列实现** - 自定义优先队列可能涉及到堆的实现,例如最小堆或最大堆,或者使用其他数据结构如平衡搜索树(AVL、红黑树等)。 - 需要实现插入、删除、查找和更新等操作,同时确保操作的时间复杂度...
在C语言中实现优先队列,通常会选择使用堆数据结构,因为它可以保证插入、删除和查找操作的时间复杂度为O(logn),其中n是队列中的元素数量。堆是一种近似完全二叉树的结构,可以分为大顶堆和小顶堆。小顶堆的性质是...
"priority_queue_1.0_excitingfbh_matlab优先队列_matlab优先队列_优先队列_"这个标题表明这是一个MATLAB环境下的优先队列实现,可能由excitingfbh开发者创建,版本为1.0。 描述中提到的"pq_create"是创建优先队列...
2. 哈夫曼编码:使用优先队列实现哈夫曼编码算法。 四、图的定义和实现 1. 图的定义:图是用线或边连接在一起的顶点或节点的集合,记为 G = (V,E),其中 V 是顶点集,E 是边集。 2. 实现方法:使用邻接矩阵、邻接...
优先队列是一种特殊的数据结构,它允许我们按照...总的来说,这个压缩包提供了一个用C语言实现的基于堆的优先队列,包含了实现和测试的源码,以及使用说明,是学习和理解优先队列及其底层数据结构堆的一个实用资源。
优先队列 优先队列(Priority Queue)是一种数据结构,它类似于常规的队列或栈,但每个元素都有与其关联的“优先级”。在优先队列中,元素的出队顺序是基于...下面是一个简单的基于数组和插入排序的优先队列实现示例:
在压缩包文件"**c#优先队列实现**"中,很可能包含了这四种实现的代码示例,你可以通过查看这些文件学习每种实现的具体细节,比如如何定义优先级、如何进行插入和删除操作,以及它们在不同场景下的性能表现。...
本文介绍了一种新的优先队列实现方法,即**基于K叉树的优先队列**。此方法旨在优化传统二叉堆基础上的优先队列算法,提高处理大规模数据集时的效率。通过构建一种特殊的K叉树堆数据结构,该算法能够有效地从n个元素...
通过这个例子,我们可以学习到Python中如何利用优先队列实现任务调度,并结合多线程进行并发处理。这在处理大量异步任务或者事件驱动的场景中非常有用,比如网络请求、定时任务等。优先队列的使用能够确保关键任务或...
常见的优先队列实现有二叉堆、斐波那契堆、跳跃表等。 二叉堆是一种常见的优先队列实现方式,分为最大堆和最小堆。在最大堆中,父节点的值总是大于或等于其子节点的值,因此根节点总是具有最高优先级;相反,最小堆...
### 利用堆实现的优先队列 #### 引言 在计算机科学领域,优先队列是一种非常重要的数据结构,它被广泛应用于多种算法中,如任务调度、事件驱动模拟等场景。相比于传统队列,优先队列允许插入元素时指定一个优先级...
本资源是求解最小生成树问题的,prim算法,用到了优先队列来提高效率,简化代码。
Java中的`java.util.PriorityQueue`类为我们提供了实现优先队列的功能。 首先,让我们深入理解`PriorityQueue`的基本概念。`PriorityQueue`是基于二叉堆(一种自平衡的树形数据结构)实现的,它不保证队列的顺序,...
1. **二叉堆实现**:最常见的优先队列实现是基于二叉堆的数据结构。二叉堆是一种特殊的完全二叉树,分为最大堆和最小堆。在最大堆中,每个节点的值都大于或等于其子节点的值,因此根节点是堆中最大的元素;在最小堆...
4. **二项队列(Binomial Heap)**:二项队列是一种合并操作高效的优先队列实现,由多个二叉堆组成,插入和合并操作的时间复杂度为O(1),删除最小元素为O(log n)。 5. **斐波那契堆(Fibonacci Heap)**:斐波那契...
对数据结构中优先队列的设计,这个仅是参考。
根据提供的文件信息,可以看出这是一段与加密技术相关的C++代码片段,主要涉及到了优先队列的概念并未在代码中直接体现出来。...此外,深入学习不同的优先队列实现方法也有助于提高编程能力和解决问题的能力。
本程序通过堆来实现优先队列,堆是一种二叉树形结构,满足堆属性:父节点的值总是大于或等于(最小堆)或小于或等于(最大堆)其子节点的值。这种特性使得堆在查找最大或最小元素时非常高效,时间复杂度为O(1)。 在...
数据结构 基于链表实现的优先队列 Cpp文件