算法设计课程复习(2)-优先队列

本文介绍了优先队列的概念和操作,包括如何找到最小或最大元素,以及支持的插入和删除操作。文中还讨论了使用优先队列解决求中位数、合并K个链表和找第k大元素的问题,并提供了相关思路和示例。

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

优先队列

优先队列的出队顺序是按照优先级来的,可以找到最小或者最大元素,同时支持插入或者删除最小最大元素。
优先队列的格式:
priority_queue<T, Container, Compare>
T:队列中元素的数据类型
Container: 用于储存和访问队列元素的底层容器的类型。
Compare: 比较关系,默认是数值上的小于关系(return a<b),比如1<2,6<7,此时队列中元素由队头到队由大到小排列,采用默认compare时此参数可以省去。

优先队列支持的操作如下:
(1)priority_queue::empty()
判断队列是否为空(也即是size是否为0),是则返回true,否则返回false。
(2)priority_queue::size()
返回队列中元素的个数。这个函数也可以用于判断队列是否为空。
(3)priority_queue::top()
返回队头元素的常引用,队头元素是在所设定的比较关系下最大也即优先级最高的元素。此函数实际上调用底层容器的front函数。
(4)priority_queue::pop()
清除队头元素。
(5)priority_queue::push(data)
给队列插入元素,新元素会按其优先级被排列到适当位置。

struct cmp{
   
   
        // "<" 表示 price 大的优先级高
        bool operator() (fruit f1,fruit f2){
   
   
            return f1.price < f2.price;
        }
    };
priority_queue<fruit,vector<fruit>,cmp> q;
优先队列相关题目
求中位数

Dynamic Median
AC代码:

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

priority_queue<int, vector<int>, less<int>> que1;    //最大堆
priority_queue<int, vector<int>, greater<int>> que2;    //最小堆

void insert(int num) {
   
     //让中位数位于最大堆的那个优先队列,所以最大堆只会比最小堆最多多一个元素
    if(que1.empty()) {
   
     //让中位数位于最大堆,所以首先进入的是最大堆
        que1.push(num);
    }
    else {
   
   
        if(num < que1.top(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值