普通队列:先进先出;后进后出
优先队列:出队顺序和入队顺序无关;和优先级相关
堆的基本表示
完全二叉树:把元素顺序排列成数的形状,不缺父节点、左节点、右节点、不缺这些就是完全元素
二叉树的性质就是:父节点大于左节点和右节点,左节点大于右节点
用数组存储二叉树(查父节点和左接点、右节点)
查父节点:(i)=*(i-1)/2 有虚拟节点:(i)=i/2
查左节点: (i)=2*i
查右节点: (i)=2*i+1
代码示范:查找父节点,左节点等
public class MaxHeap<E extends Comparable<E>> {//Comparable 比较方法
private Array<E> data;
public MaxHeap(int capacity){
data=new Array<E>(capacity);
}
public MaxHeap(){
data =new Array<E>();
}
//返回堆中的元素个数
public int size(){
return data.getSize();
}
//返回一个布尔值,表示堆中是否为空
public boolean isEmpty(){
return data.isEmpty();
}
//返回完全二叉树的数组表示中,一个索引所代表的元素的父亲节点的索引
private int parent(int index){
if(index == 0)
throw new IllegalArgumentException("第一个索引没有父节点");
return (index -1)/2;
}
//返回完全二叉树的数组表示中,一个索引所表示的元素的左孩子节点的索引
private int leftChild(int index){
return index*2+1;
}
//返回完全二叉树的数组表示中,一个索引所表示的元素的右孩子节点的索引
private int rightChild(int index){
return index*2+2;
}
}