//最大堆的删除操作
ElementType DeleteMax(MAxHeap H)
{
int Parent,Child;
ElementType MaxItem,X;
if(IsEmpty(H)) //判断最大堆是否为空
{
printf("最大堆已空");
return ERROR;
}
MaxItem=H->Data[1]; //取出堆的根结点
X=H->Data[H->Size--]; //取出堆的最后一个结点,并把堆的规模减小1
for(Parent = 1; Parent*2<=H->Size; Parent=Child)
//这里的Parent=Child表示如果Parent小于孩子,则Parent移动到孩子位置上,如果这个孩子位置的
//后面还有孩子,要继续判断Parent和新的孩子的大小
// 从根结点开始, Parent*2 代表所有的父节点
{
Child=Parent * 2; //Child存放左右孩子中的最大值
if((Child!=H->Size)&&(H->Data[Chuld]<H->Data[Child+1]))
//如果存在右结点且右结点大于左结点的值,则将此赋值给Child
Child++;
if(X>=H->Datap[Child]) //如果X比左右孩子都大,则位置确定
Break;
else //否则X和Child交换位置,继续往下比较
H->Data[Patent]=H->Data[Child];
} //最后循环结束,找到X的位置
H->Data[Parent]=X;
return MaxItem;
}
最大堆的删除操作代码解释
猜你喜欢
转载自blog.csdn.net/qq_44256227/article/details/90411820
今日推荐
周排行