版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/82989608
优先队列
- 普通队列 : 先进先出(FIFO); 后进后出
- 优先队列 : 出队顺序和入队顺序无关, 和优先级相关
使用最大堆可以很方便的实现优先队列, 代码如下 :
package queue;
import heap.MaxHeap ;
/**
* 使用最大堆实现优先队列
* @author 七夜雪
*
* @param <E>
*/
public class PriorityQueue<E extends Comparable<E>> implements Queue<E> {
private MaxHeap<E> maxHeap;
public PriorityQueue() {
maxHeap = new MaxHeap<>();
}
@Override
public void enqueue(E e) {
maxHeap.add(e);
}
@Override
public E dequeue() {
return maxHeap.extractMax() ;
}
@Override
public E getFront() {
return maxHeap.findMax() ;
}
@Override
public int getSize() {
return maxHeap.getSize() ;
}
@Override
public boolean isEmpty() {
return maxHeap.isEmpty() ;
}
}
Queue接口定义如下 :
package queue;
public interface Queue<E> {
/**
* 入队
* @param e
*/
void enqueue(E e);
/**
* 出队
* @return
*/
E dequeue();
/**
* 获取队首元素
* @return
*/
E getFront();
/**
* 获取队列长度
*/
int getSize();
/**
* 获取队列是否为空
* @return
*/
boolean isEmpty();
}
最大堆代码: http://blog.csdn.net/love905661433/article/details/82989404