您的位置:首页 > 其它

堆(heap)

2016-01-21 19:41 211 查看
堆(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;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: