前言
- 普通队列是一种先进先出的数据结构,先放进队列的元素取值时优先被取出来。
- 优先队列是一种具有最高优先级元素先出的数据结构,比如每次取值都取最大的元素。
- 优先队列有两个核心方法,一个是insert(val)向队列中添加元素,另外一个是delMax()删除最大元素(优先级最高的)并返回。可以考虑使用数组来存储优先队列的数据。
优先队列的实现
有序数组
- 调用insert方法时使用类似插入排序把新增元素放到正确位置,插入的时间复杂度:N
- 调用delMax方法时直接取数组最后一个元素:删除的时间复杂度:1
无序数组
- 调用insert方法时直接把元素放到数组中,插入的时间复杂度:1
- 调用dexMax方法时使用类似选择排序的方法从数组中找出最大元素并删除,删除的时间复杂度:N
堆
- 每个节点都大于其子节点的二叉树被称为二叉堆。
- 二叉堆可以使用数组来存储。
- 插入的时间复杂度:logN、删除的时间复杂度:logN