1.优先队列的API和初等实现
做一个总结:
栈 :先进后出
队列 :先进先出
随机队列 : 随机出
优先队列:每次出来的是最大值或最小值
1.1优先队列的API
![](https://raw.githubusercontent.com/hk029/blog/master/算法/优先队列(Priority%20Queue)/1459048379829.png)
优先队列在很多场合都有用,
比如:在大量数据里,如果取前M大的数据(存储不足以存下如此大规模数据),就可以用优先队列(MinPQ来做,类似MaxPQ,只是每次删除最小值)——一直保证队列中只有M个比较大的数据,每次删除超过M个里面的最小值。
![](https://raw.githubusercontent.com/hk029/blog/master/算法/优先队列(Priority%20Queue)/1459048801739.png)
1.2初等实现
如果用数组来做,我们可以考虑用排序好的数组或没排序的数组。
![](https://raw.githubusercontent.com/hk029/blog/master/算法/优先队列(Priority%20Queue)/1459049017022.png)
它们的实现方案都比较简单,但是都有致命的缺点:
排序数组,每次插入的时候需要N的时间复杂度
未排序的数组:每次删除或查找的时候,需要N的时间复杂度
我们的目标是找到一个插入和删除都logN复杂度的数据结构。——二叉堆