堆(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;
}
}
}原文:http://zhenzhuangde.blog.51cto.com/10697385/1737426