最小-最大堆的实现(三)

2014-11-24 08:19:02 · 作者: · 浏览: 2
MinMaxHeap H)
{
if(i <= H->Size)
{
H->Elements[i] += Delta;
PercolateDown(i, H);
}
}
/*
* 删除关键字
* 把最后一个位置的值放到i位置
* 如果删除值比最后一个值小,相当于增加了i位置的值,
* 执行下滤过程
* 如果删除值比最后一个值大,相当于减小了i位置的值,
* 执行上滤过程
*/
static void
Delete(Position i, MinMaxHeap H)
{
ElementType Del;
if(i <= H->Size)
{
Del = H->Elements[i];
H->Elements[i] = H->Elements[H->Size--];
if(Del < H->Elements[i])
PercolateDown(i, H);
else if(Del > H->Elements[i])
PercolateUp(i, H);
}
}
/*
* 测试例程
*/
void MinMaxHeapTest(void)
{
int i;
MinMaxHeap H;
H = Initalize(1000);
if(H==NULL) return;
for(i=1; i<1000; i++)
Insert(i,H);
IncreaseKey(1,1000,H);
for(i=0; i<400; i++)
{
printf("% 3d--% 3d\n",DeleteMin(H), DeleteMax(H));
}
Destroy(H);
}