DelayedWorkQueue优先队列

DelayedWorkQueue优先队列

该队列是定制的优先级队列,只能用来存储RunnableScheduledFutures任务。堆是实现优先级队列的最佳选择,而该队列正好是基于堆数据结构的实现。

1.关于堆的一些知识
堆结构是用数组实现的二叉树,数组下标可以表明元素节点的位置,所以省去指针的内存消耗;堆内元素节点的位置取决于节点的某一个属性的大小值,根据父节点是否大于左右节点分为最小堆和最大堆。即二叉树根节点最小则为最小堆,二叉树根节点最大则为最大堆;下面是最小堆和最大堆的示例:

最小堆

最小堆中,父节点都小于左右节点;其数组形式:[1, 5, 8, 6, 10, 11, 20]

最大堆

最大堆总,父节点都大于左右节点;其数组形式:[20, 10, 15, 6, 9, 10, 12]

2.堆的一些属性

  • 堆都是满二叉树.因为满二叉树会充分利用数组的内存空间;
  • 最小堆是指父节点比左节点和右节点都小的结构,所以整个最小堆中,根节点是最小的节点;
  • 最大堆是指父节点比左节点和右节点都大的结构,所以整个最大堆中,根节点是最大的节点;
  • 最大堆和最小堆的左节点和右节点没有关系,只能判断父节点和左右两节点的大小关系;

基于堆的这些属性,堆适用于找到集合中的最大或者最小值;另外,堆结构记录任务及其索引的关系,便于插入数据或者删除数据后重新排序,所以堆适用于优先队列。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,优先队列是一种特殊的队列数据结构,它的元素按照一定的优先级进行排序。在优先队列中,每个元素都有一个与之相关联的优先级,优先级高的元素会被先出队列。 C++中使用优先队列需要包含头文件<queue>。下面是使用优先队列的一般步骤: 1. 定义优先队列:使用std::priority_queue类来定义一个优先队列对象。可以指定元素类型和比较函数(默认为std::less)。 例如:std::priority_queue<int> pq; // 定义一个存储int类型元素的优先队列 2. 插入元素:使用push()函数向优先队列中插入元素。 例如:pq.push(10); // 向优先队列中插入元素10 3. 访问队首元素:使用top()函数可以获取优先队列中的队首元素,即优先级最高的元素。 例如:int topElement = pq.top(); // 获取优先队列中的队首元素 4. 删除队首元素:使用pop()函数可以删除优先队列中的队首元素。 例如:pq.pop(); // 删除优先队列中的队首元素 需要注意的是,优先队列默认是按照元素的大小进行排序,即大顶堆(最大值在顶部)。如果需要自定义排序规则,可以通过自定义比较函数来实现。 下面是一些相关问题: 1. 什么是优先队列? 2. 如何定义一个优先队列对象? 3. 如何向优先队列中插入元素? 4. 如何获取优先队列中的队首元素? 5. 如何删除优先队列中的队首元素? 6. 优先队列是如何进行排序的? 7. 如何自定义优先队列的排序规则?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值