自定义堆(2):通过堆实现优先队列

版权声明:转载请注明出处: https://blog.csdn.net/qq_34774655/article/details/85568012

学习堆、优先队列之间的关系。

 

普通队列:先进先出;后进后出。

优先队列:出队顺序和入队顺序无关,和优先级相关。

 

  入队 出队(拿出最大元素)
之前自定义的普通线性结构 O(1) O(n)
之前自定义的顺序线性结构 O(n) O(1)
O(log n) O(log n)

此外:优先队列应用的经典问题是:在N个元素中选出前M个元素。

其他的排序算法一般能达到:O(NlogN)  ,而优先队列可以达到  O(NlogM)。

参考1:  自定义堆        MaxHeap.java

参考2:自定义队列       Queue.java

注:java.util包中的PriorityQueue是小顶堆实现的。

package Heap;

public class PriorityQueue<E extends Comparable<E>> implements Queue<E>{
	
	private MaxHeap<E> maxHeap;//底层维护了一个最大堆
	public PriorityQueue() {
		maxHeap=new MaxHeap<>();
	}
	/**
	 * 获取队列中数据的大小
	 */
	@Override
	public int getSize() {
		return maxHeap.size();
	}
	/**
	 * 判断队列是否为空
	 */
	@Override
	public boolean isEmpty() {
		return maxHeap.isEmpty();
	}
	/**
	 * 在队尾插入元素
	 */
	@Override
	public void enqueue(E e) {
		maxHeap.add(e);
		
	}
	/**
	 * 在队头删除元素
	 */
	@Override
	public E dequeue() {
		return maxHeap.extractMax();
	}
	/**
	 * 查看队头元素
	 */
	@Override
	public E getFront() {
		return maxHeap.findMax();
	}
	
	
	
}

猜你喜欢

转载自blog.csdn.net/qq_34774655/article/details/85568012
今日推荐