在每个元素都有优先级的情况下
Struct | 入队 | 出队(拿出最大元素) |
---|---|---|
普通线性结构 | O(1) | O(n) |
顺序线性结构 | O(n) | O(1) |
堆 | O(logn) | O(logn) |
用堆实现:
- 优先队列的实现,是根据优先值来实现,先执行优先级高的任务,但是因为队列在源源不断更新,所以需要动态调整优先队列,将要执行的对象放在堆顶。
接口
public interface Queue<E> {
int getSize();
boolean isEmpty();
void enqueue(E e);
E dequeue();
E getFront();
}
底层用最大堆实现
public class PriorityQueue<E extends Comparable<E>> implements Queue<E>{
private MaxHeap<E> maxHeap;
public PriorityQueue(){
maxHeap = new MaxHeap<E>();
}
@Override
public int getSize(){
return maxHeap.size();
}
@Override
public boolean isEmpty(){
return maxHeap.isEmpty();
}
@Override
public void enqueue(E e){
return maxHeap.add(e);
}
@Override
public E dequeue(){
return maxHeap.extractMax();
}
@Override
public E getFront(){
return maxHeap.findMax();
}
}