堆(heap)

堆(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]<nheap[2*i])
					child++;
				if(last>heap[child])
					nheap[i]=nheap[child]
				else
					break;
			}
			nheap[i]=last;
			return cur;
		}
	}
}


你可能感兴趣的:(堆)