PriorityQueue(优先队列)和Heap(堆)到底有什么区别?

博客介绍了优先队列和堆的概念。优先队列是特殊队列,可取出最大或最小元素;堆概念广泛,常用完全二叉树(数组)存储,有二叉堆、二项堆、斐波那契堆等。指出二叉堆是优先队列的一种实现方式,优先队列还有其他实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先来看名字:

优先队列:
说到底还是一种队列 不过是一种特殊的队列
他的工作就是poll()/peek()出队列中最大/最小的那个元素

堆:
首先我们要明确:堆是一个很大的概念 他并不一定是完全二叉树 我们之前用完全二叉树是因为这个很容易被数组储存(index: index * 2是右子节点 index*2+1是左子节点)正因为这样 所以大部分时间我们用完全二叉树(数组)来储存堆,但是除了这种二叉堆之外 我们还有二项堆 斐波那契堆 这种堆就不属于二叉树

优先对列和堆有什么区别呢?
这里面说的堆默认我们最常使用的二叉堆,而二叉堆只是优先队列的一种是实现方式而已。那么优先队列还有哪些实现方式呢?
还有:二项堆 平衡树 线段树 甚至用二进制分组的vector来实现一个优先对列。
所以说 优先队列和堆不是一个同level的概念 如果非要说 他们之间的关系就是:二叉堆只是优先队列的一种实现方式,而java的PriorityQueue也是基于这个实现的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值