博客
关于我
queue队列、deque双端队列和priority_queue优先队列
阅读量:795 次
发布时间:2023-03-02

本文共 1823 字,大约阅读时间需要 6 分钟。

C++ 数据结构指南:队列、双端队列和优先队列

1. 队列(Queue)

队列是一种先进先出的数据结构(FIFO),常用于处理实时任务或批量处理。以下是队列的主要操作方法:

1.1 size()

  • 功能:返回队列中元素的数量。
  • 示例int size = q.size();

1.2 front()

  • 功能:返回队列中第一个元素。
  • 示例string front = q.front();

1.3 pop()

  • 功能:从队列中取出并删除第一个元素。
  • 示例q.pop();

1.4 push()

  • 功能:将一个元素添加到队列的末尾。
  • 示例q.push("元素");

1.5 empty()

  • 功能:判断队列是否为空,返回truefalse
  • 示例bool empty = q.empty();

2. 双端队列(Deque)

双端队列(Deque)是一种既可以从前面(front)也可以从后面(back)添加和删除元素的队列。它比普通队列更灵活,适合多个操作场景。

2.1 push_back()

  • 功能:从队列的末尾添加一个元素。
  • 示例q.push_back("元素");

2.2 push_front()

  • 功能:从队列的开头添加一个元素。
  • 示例q.push_front("元素");

2.3 pop_back()

  • 功能:从队列的末尾删除一个元素。
  • 示例q.pop_back();

2.4 pop_front()

  • 功能:从队列的开头删除一个元素。
  • 示例q.pop_front();

2.5 size()

  • 功能:返回队列中元素的数量。
  • 示例int size = q.size();

2.6 at(idx)

  • 功能:返回队列中指定索引位置的元素。
  • 示例string element = q.at(2);

2.7 insert(pos, elem)

  • 功能:在指定位置插入一个元素的拷贝。
  • 示例int pos = q.insert(q.end(), "元素");

2.8 erase(pos)

  • 功能:删除指定位置的元素,并返回下一个元素的位置。
  • 示例int new_pos = q.erase(q.begin() + 2);

2.9 erase(begin, end)

  • 功能:删除指定区间内的元素。
  • 示例q.erase(q.begin(), q.begin() + 3);

2.10 clear()

  • 功能:删除队列中所有元素。
  • 示例q.clear();

3. 优先队列(Priority Queue)

优先队列是一种基于堆的数据结构,能够快速获取最大的元素(大顶堆,默认定义)或最小的元素(小顶堆,需要指定比较器)。

3.1 队列定义

  • 小顶堆
    priority_queue
, greater
> p;
  • 大顶堆(默认定义)
    priority_queue
    q;
  • 3.2 常用操作

    • size():返回队列中元素的数量。
    • front():返回队列中第一个(最大)元素。
    • pop():从队列中取出并删除最大的元素。
    • push():将一个元素添加到队列中。

    4. 简单实例

    #include 
    #include
    #include
    using namespace std;
    int main() {
    queue
    Q;
    Q.push("红");
    Q.push("黄");
    Q.push("黄");
    Q.push("蓝");
    cout << Q.front() << " "; // 输出队列头元素:红
    Q.pop();
    Q.pop();
    cout << Q.size() << " "; // 输出队列中的元素数:2
    Q.push("绿");
    // 如果是栈,输出将是黄,但队列是FIFO
    cout << Q.front() << " "; // 输出队列头元素:黄
    return 0;
    }

    运行结果:

    红 黄
    2

    以上内容完整涵盖了队列、双端队列和优先队列的核心操作方法,供开发者参考使用。

    转载地址:http://letfk.baihongyu.com/

    你可能感兴趣的文章
    php时间戳知识点,php 时间戳函数总结与示例
    查看>>
    php更新数据库失败,php – 无法更新MySQL数据库
    查看>>
    php机器人聊天对话框,基于AIML的PHP聊天机器人
    查看>>
    PHP查找数组中最大值与最小值
    查看>>
    php查最大值,在PHP数组中查找最大值
    查看>>
    php标签筛选,关于PHP CodeIgniter框架中通过<a>标签和url做多条件分类筛选
    查看>>
    php根据年月日计算年龄
    查看>>
    RabbitMQ - 单机部署(超详细)
    查看>>
    php检查注册,PHP检查注册的电子邮件地址是一个’school.edu’地址
    查看>>
    php模拟发送GET和POST请求
    查看>>
    RabbitMQ - 以 MQ 为例,手写一个 RPC 框架 demo
    查看>>
    php模板引擎smarty
    查看>>
    php正则表达式模式
    查看>>
    php正则表达式的特殊字符含义
    查看>>
    PHP正则表达式获取武汉市的实时pm2.5数据并邮件发送phpmailer
    查看>>
    RabbitMQ + JMeter组合,优化你的中间件处理方式!
    查看>>
    PHP水仙花问题解法之一
    查看>>
    php没有解析是怎么回事,linux下php文件没有被剖析怎么办?_后端开发
    查看>>
    php注册页面实现注册后跳转页面
    查看>>
    PHP消息队列的实现方式与详解,值得一看
    查看>>