堆结构(heap)

阿里笔试题:

【0、2、1、4、3、9、5、8、6、7】是以数组形式存储的最小堆,删除堆顶元素0后的结果是()

【2、1、4、3、9、5、8、6、7】
【1、2、5、4、3、9、8、6、7】
【2、3、1、4、7、9、5、8、6】
【1、2、5、4、3、9、7、8、6】

 

应选D,不会的朋友可以先阅读下文。

 

以下是参考维基百科对堆的解释:

(英语:Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。

堆一般是一个完全二叉树,具有以下性质:

1.任意节点小于或等于(大于或等于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)(左子节点“不一定”要大于右子节点)。对应为最小(最大堆)。

2.堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。

将根节点最大的堆叫做最大堆大根堆,根节点最小的堆叫做最小堆小根堆。常见的堆有二叉堆斐波那契堆等。

堆(通常是二叉堆)常用于排序。这种算法称作堆排序。主要运用堆的排序以选择优先。

下面演示最小堆堆顶元素被删除后的自适应过程:用数组来表示该堆:1,4,2,7,9,5,8

143242_1rSf_2708044.png

堆顶元素1被删除后,最后一个元素8填补堆顶的空缺:

143540_A4vb_2708044.png

堆顶8与其两个子节点4、2比较,选最小的与堆顶互换,如果堆顶就是最小的,则结束:

143752_Jg0c_2708044.png

节点8所在的节点继续与其子节点比较,重复上一步骤,直到满足:任意节点小于或等于它的所有后裔

144013_R67N_2708044.png

至此,结束。用数组来表示该堆:2,4,5,7,9,8

最大堆的形式与之相反,是要满足:任意节点大于或等于它的所有后裔

 

转载于:https://my.oschina.net/henryking/blog/692372

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值