`

优先队列Queue

 
阅读更多
Class:
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
		
	}

}
分享到:
评论

相关推荐

    priority_queue_1.0_excitingfbh_matlab优先队列_matlab优先队列_优先队列_

    "priority_queue_1.0_excitingfbh_matlab优先队列_matlab优先队列_优先队列_"这个标题表明这是一个MATLAB环境下的优先队列实现,可能由excitingfbh开发者创建,版本为1.0。 描述中提到的"pq_create"是创建优先队列...

    优先队列(Priority Queue)是一种特殊类型的队列

    优先队列(Priority Queue)是数据结构中的一种特殊队列,它的主要特点是元素的出队顺序不是按照“先进先出”(FIFO)的原则,而是根据每个元素的优先级来决定。这种数据结构广泛应用于各种算法和系统设计中,如事件...

    优先队列-java可以选择属性和升序降序

    优先队列在Java编程中是一种特殊的数据结构,它遵循特定的出队顺序,通常是最小元素(最小优先队列)或最大元素(最大优先队列)先出队。这种数据结构在解决各种问题时非常有用,例如任务调度、事件驱动编程、搜索...

    用堆实现优先队列

    优先队列是一种特殊的数据结构,它允许我们按照优先级顺序处理元素。在计算机科学中,尤其是在算法和数据结构领域,优先队列常用于解决需要快速访问最高优先级元素的问题,如Dijkstra算法或Prim算法。在C语言中,...

    数据结构课程设计优先队列数据(priority_queue)类型

    在数据结构课程设计中,优先队列数据类型(priority_queue)是核心概念之一,常用于实现高效的调度、搜索和优化问题。在本项目中,我们将讨论如何实现这种数据结构以及其主要操作。 **一、优先队列的定义** 优先...

    最大和最小优先队列的基本操作

    - **获取队列长度**:`QueueLength`函数用于计算当前优先队列中的元素数量。 ### 五、代码分析 提供的代码示例中还包括了初始化队列(`InitQueue`)、删除队首元素(`DeQueue`)等操作的实现。这些函数共同构成了一个...

    C语言优先队列

    insert_queue函数用于往优先队列插入新的元素。该函数首先检查队列是否需要扩容,如果需要则扩容,然后将新元素插入到队列中并维护堆的性质。 知识点七:search_queue函数 search_queue函数用于查找优先权最高的...

    简单的优先队列

    优先队列是一种特殊的队列,其中元素按照优先级顺序进行排列。在计算机科学中,它是一种数据结构,常用于处理需要快速访问最高优先级元素的问题。在这个话题中,我们将深入探讨与“简单的优先队列”相关的几个核心...

    STL-优先队列-队列-栈

    在STL中,优先队列是通过`priority_queue`容器实现的。优先队列的元素是按照其优先级从高到低排列的,高优先级的元素先出队列。 优先队列的使用方法有三种: 1. 使用默认的比较函数。在这种方法中,元素类型的`...

    优先队列 优先队列.rar

    用户可以使用`&lt;queue&gt;`头文件中的`priority_queue`模板类来创建和操作优先队列。以下是一些基本操作: 1. 初始化:`priority_queue&lt;int&gt; pq;` 创建一个存储整数的优先队列。 2. 插入元素:`pq.push(val);` 将元素...

    C-优先队列

    优先队列是一种特殊的数据结构,它允许我们按照优先级处理元素。在计算机科学中,特别是在算法和数据结构领域,优先队列通常用于实现任务调度、事件驱动模拟、图的最短路径计算等场景。在C语言中,由于没有内置的...

    优先队列实验报告

    `Queue` 结构体则用来表示整个优先队列,它包含一个 `key` 数组用于存储堆中的节点,以及一个 `CurrentSize` 字段记录当前队列的长度。`MaxSize` 是队列的最大容量。 接下来是函数定义和算法说明: 1. `InitQueue...

    C++ 优先队列实例(Priority_queue)

    C++中的优先队列(Priority_queue)是一种特殊的数据结构,它遵循“大顶堆”或“小顶堆”的原则,即队列中的元素总是按照优先级进行排序。在这个实例中,我们关注的是如何在C++环境中,特别是使用Visual C++ 2008 ...

    关于STL中优先队列的用法

    在STL中,优先队列是由`priority_queue`类模板实现的。该容器内部实际上是一个最大堆,因此访问最大元素的时间复杂度为O(1),而插入和删除操作的时间复杂度为O(log n)。 #### 三、默认行为:升序排列 在默认情况下...

    C++优先队列.pdf

    优先队列(Priority Queue)是一种特殊的队列,队列中的每个元素都有一个优先级,每次取出的是优先级最高的元素。C++标准模板库(STL)中的优先队列是一种特殊的容器适配器,其实现基于二叉堆。 #### 二、优先队列...

    优先队列求无序整数序列中第k小的元素.cpp

    优先队列求无序整数序列中第k小的元素.cpp

    优先队列讲解及代码实现.zip

    优先队列(Priority Queue)是一种数据结构,它类似于常规的队列或栈,但每个元素都有与其关联的“优先级”。在优先队列中,元素的出队顺序是基于它们的优先级,而不是它们进入队列的顺序。通常,优先级最高的元素...

    自己编写优类似优先队列数据(priority_queue)的功能

    自己编写优类似优先队列数据(priority_queue)的功能,适合上交的课程设计作业

    cy-优先队列的练习(队列四--林大版).pdf

    在C++标准模板库(STL)中,优先队列是通过`priority_queue`类来实现的。在C++中,优先队列默认是大根堆,即堆顶元素总是所有元素中最大的。通过使用不同的比较函数或比较类,可以将优先队列配置为小根堆,即堆顶...

Global site tag (gtag.js) - Google Analytics