正在看数据结构的二叉堆部分,书上的插入例程似乎有问题,而且没有考虑到边界条件。
更正一下,书上的程序没有问题啊,是我对for循环的执行过程认识不清。
void Insert(ElementType X, priorityQueue H)
{
int i;
if(isFull(H))
{
Error("Priority queue is full");
return;
}
for(i = ++H->Size; H->Element[i/2] > X; i /= 2)
H->Element[i] = H->Element[i/2];
H->Element[i] = X;
}
自己也写个插入函数:
void Insert(ElementType X, priorityQueue H)
{
int i;
if(isFull(H))
{
Error("Priority queue is full");
return;
}
i = ++H->Size;
for(; i >= 1 && H->Element[i] > X; i /= 2)
H->Element[i] = H->Element[i/2];
H->Element[i] = X;
}
当然也可以在数组的位置0处放一个很小的数避免每次判断是否到达根节点。