优先队列是一种抽象数据类型
前言
请结合二叉堆一起看
应用场景
- 模拟系统:事件的键为发生时间,系统按时间顺序处理事件
- 任务调度:键值对应优先级,决定先处理哪些任务
- 数值计算:键值代表计算错误,按照键值指定的顺序来修正他们
API
- delMax() 删除最大的元素
- insert() 插入元素
用例
public class MaxPQ<Key extends Comparable<Key>> {
MaxPQ(key[] a)
void insert(Key v)
Key max()
Key delMax()
Boolean isEmpty()
int size()
}
基于二叉堆的优先队列
import { exch, less, swin, sink } from './util';
class MaxPQ <Key extends Comparable<Key>> {
private pq: Array<number | string>;
private N: number;
constructor(maxN) {
this.pq = new Array(maxN + 1);
this.N = maxN;
}
public isEmpty(): boolean {
return this.N === 0;
}
public size(): number {
return this.N;
}
public insert(v): void {
this.pq[++N] = v;
swin(N)
}
public delMax(v): void {
const max = this.pq[1];
exch(1, N--);
this.pq.pop();
sink(1);
return max;
}
}