优先级队列-priority_queue

目录

一、定义

二、堆的实现

三、算法实现

插入操作

删除操作

向下调整

向上调整


一、定义

优先级队列本质是堆,缺省是是大顶堆(less<Type>)(operator<)。队列是从一头入另一头出,优先级队列可以自定义数据优先级,让优先级高的排前面。

priority_queue<Type,Contians,function> pq;

Type是数据类型,Contains是容器,一般默认是vector(也可以是其他用数组实现的容器)

不同于队列的是获取队头元素是top();

二、堆的实现

数组中下标为k的元素的父节点(假设存在的话)的下标为[k/2](向下取整),其子节点(假设子节点存在)的下标为2k和2k+1。

 

三、算法实现
 

插入操作

删除操作

   

部分代码

向下调整

		void adjust_down(size_t parent)
		{
			size_t child = parent * 2 + 1;
			while (child < _con.size())
			{
				if (child + 1 < _con.size() && _con[child] < _con[child + 1])
					++child;
				if (_con[child] > _con[parent])
				{
					swap(_con[child], _con[parent]);
					parent = child;
					child = 2 * parent + 1;
				}
				else
					break;
			}
		}

向上调整

		void adjust_up(size_t child)
		{
			size_t parent = (child - 1) / 2;
			while (child > 0)
			{
				if (_con[child] > _con[parent])
				{
					swap(_con[child], _con[parent]);
					child = parent;
					parent = (child - 1) / 2;
				}
				else
					break;
			}
		}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值