堆(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; } }}