最大ヒープ削除コードインタプリタ

//最大堆的删除操作 
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