堆,有些时候又叫优先队列(此说法欠严谨),是一种常见的逻辑结构。
名字反映了这种结构的两个特点:
• 整体看,它是一种金字塔形堆叠结构,下层元素数量比上层多。
• 纵向看,它由一条条有序列汇流而成,每个元素其实不关心其横向关系。
1 1 1 1 1 1 1
/ \ | | | | | |
2 5 <=> 2 2 2 5 5 5
/ \ / \ | | | | | |
5 4 6 8 5 5 4 6 8 8
/ \ / \ / \ / \ | | | | |
9 7 6 9 8 9 7 6 9 8
因此,堆擅长回答的并不是“某个元素在哪里”,而是“当前最该弹出谁”。后面几节的区别,主要就在于如何维护这种汇流关系,以及是否愿意为合并操作专门优化结构。