1、入队列
把元素插入数组末尾,然后进行向上调整;
2、出队列·
如果数组不为空时,取数组最后一个元素,下标为(size-1),赋值到下标为0的元素上;
尾删最后一个元素,即 size–;
然后将0号下标元素向下调整;
3、取队首元素
如果数组不为空时,取数组下标为0的元素;
优先队列实现过程
// 以大堆为例
public class MyPriorityQueue {
private int[] array = new int[100]; // 不考虑扩容问题
private int size = 0; // [0,size) 为数组下标
// 入队列 ---- 数组尾插向上调整
private void offer(int x) {
// 把 x 放到数组的末尾
array[size] = x;
size++;
// 把 x 进行向上调整
// 第一个参数是数组
// 第二个参数是数组大小
// 第三个参数是从哪个位置开始向上调整
shiftUp(array, size, size-1);
}
// 出队列 ---- 数组头删向下调整
private Integer poll() {
if(size == 0) {
return null;