https://www.icourse163.org/learn/ZJU-93001#/learn/content?type=detail&id=1211167093&cid=1213729247

堆的两个特性:

  1. 结构性:用数组表示的完全二叉树
  2. 有序性:任意结点的关键字是其子树所有节点的最大或最小值

创建堆

[block]

public class create{
int Size;
int Capacity;
int[] emlements;
public create(int maxSize){
elements=new int[maxSize];
}
}

[/block]

堆的插入:

[block]

public void Insert(maxHeap H,int item){

int i;

if(isFull(H)){//堆已满

return;

}

i=++H.Size;//i指向堆的最后一个位置

for(;H.elements[i/2]<item;i/=2)//如果i比父节点(i/2)的值大就执行该循环并把父节点下移,i指向原来父节点位置

H.emements[i]=H.elements[i/2];

H.elements[i]=item;

}

[/block]

删除结点:

基本思路:拿最后一个元素替补被删除的根节点,然后再调整树的结构

public class delect{
	public delect(Maxheap H){
		int parent,child;
		ElementType max,temp;
		if(堆是空的){
			return;
		}
		max=H.Element[1];//取出根节点最大值
		temp=h.Element[H.Size--];//最大堆的最后一个结点
		for(parent=1;chile*2<=H.Size;parent=child){
			child=2*parent;//找到最大子节点
			if(child!=H.Size&&H.Element[child]<H.Element[child+1]){
				chile++;
			}
			if(temp>=H.Element[child]){//如果找到temp该呆的位置
				break;
			}else{//移动到下一层找
				H.Element[parent]=h.Element[child];
			}
		}
			H.Element[parent]=temp;
			return max;
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值