堆(heap) 优先队列
堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。
任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
(来自wiki)
class heap{ private int size; private int end=0; public heap(int size) { int[] nheap=new nheap[size]; } public void buildandinsert(int val) //插入 { if(end==0) { nheap[1]=val; end++; } else { for (int i=end+1;nheap[i/2]>val ;i/=2 ) nheap[i]=nheap[i/2]; nheap[i]=val; end++; } } public int delete() //删除 { int cur=nheap[1]; int last=nheap[end]; if (end==1) return ; else { int child; for (int i=1;2*i<=end ;i=child ) { child=2*i; if(nheap[2*i+1]heap[child]) nheap[i]=nheap[child] else break; } nheap[i]=last; return cur; } }}