C++之容器:双端队列queue用法实例(二百七十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.C++之queue介绍
    • 🌻3.代码实例
      • 🐓3.1 使用 queue 实现 Level Order 遍历二叉树
      • 🐓3.2 使用 queue 解决广度优先搜索问题
      • 🐓3.3 使用 queue 实现逆波兰表达式求值

🌻1.前言

本篇目的:C++之容器:双端队列queue用法实例

🌻2.C++之queue介绍

  • C++ 中的 deque 是一种容器,全称为 double-ended queue,即双端队列。它支持在两端进行元素的插入和删除操作,具有较高的效率。deque 是 C++ STL(标准模板库)中的一部分,使用时需要包含头文件 。

  • deque 的主要特点如下:

  • 两端操作:deque 支持在两端进行元素的插入和删除。这意味着可以在队列的前端(头部)和后端(尾部)分别进行 push 和 pop 操作,类似于生活中的队列和栈。

  • 动态数组:deque 内部采用动态数组实现,可以自动调整容量以适应元素数量的变化。当 deque 容量不足时,系统会自动为其分配更大的空间;当容量过剩时,系统会释放部分空间。

  • 随机访问:deque 支持随机访问,即可以通过索引直接访问 deque 中的元素。这使得 deque 在查找元素时具有较高的效率。

  • 迭代器:deque 支持迭代器,可以通过迭代器进行元素的遍历和操作。

  • 在使用 deque 时,需要指定其元素类型。例如,创建一个整数类型的 deque,可以使用以下语法:

deque 的常用操作:
插入元素:
在前端插入元素:d.push_front(value)
在后端插入元素:d.push_back(value)
删除元素:
从前端删除元素:d.pop_front()
从后端删除元素:d.pop_back()
访问元素:
通过索引访问元素:d[index]
获取前端元素:d.front()
获取后端元素:d.back()
容量操作:
返回 deque 的容量:d.size()
清空 deque:d.clear()
返回 deque 的最大容量:d.max_size()
关系操作:
判断两个 deque 是否相等:d1 == d2
判断两个 deque 是否不等:d1 != d2
判断 deque 是否为空:d.empty()

🌻3.代码实例

🐓3.1 使用 queue 实现 Level Order 遍历二叉树

#include <iostream>
#include <queue>
#include <vector>struct TreeNode {int value;TreeNode *left;TreeNode *right;TreeNode(int x) : value(x), left(nullptr), right(nullptr) {}
};void levelOrder(TreeNode *root) {if (root == nullptr) return;std::queue<TreeNode*> q;q.push(root);while (!q.empty()) {TreeNode *node = q.front();q.pop();std::cout << node->value << " ";if (node->left != nullptr) q.push(node->left);if (node->right != nullptr) q.push(node->right);}
}int main() {TreeNode *root = new TreeNode(1);root->left = new TreeNode(2);root->right = new TreeNode(3);root->left->left = new TreeNode(4);root->left->right = new TreeNode(5);std::cout << "Level Order 遍历结果: ";levelOrder(root);return 0;
}

🐓3.2 使用 queue 解决广度优先搜索问题

#include <iostream>
#include <queue>
#include <vector>void BFS(int start, const std::vector<int>& graph) {std::queue<int> q;std::vector<bool> visited(graph.size(), false);q.push(start);visited[start] = true;while (!q.empty()) {int node = q.front();q.pop();std::cout << node << " ";for (int neighbor : graph[node]) {if (!visited[neighbor]) {q.push(neighbor);visited[neighbor] = true;}}}
}int main() {std::vector<int> graph[] = {{1, 2}, {3}, {3}, {}};BFS(0, graph);return 0;
}

🐓3.3 使用 queue 实现逆波兰表达式求值

#include <iostream>
#include <queue>
#include <stack>
#include <cmath>
#include <cstring>using namespace std;int precedence(char op) {if (op == '+' || op == '-') return 1;if (op == '*' || op == '/') return 2;return 0;
}int applyOp(int a, int b, char op) {switch (op) {case '+': return a + b;case '-': return a - b;case '*': return a * b;case '/': return a / b;}return 0;
}int evaluateRPN(string &rpn) {stack<int> values;std::queue<char> ops;for (int i = 0; i < rpn.length(); i++) {if (rpn[i] == ' ') continue;if (isdigit(rpn[i])) {values.push(stoi(string(1, rpn[i])));} else {ops.push(rpn[i]);}}while (!ops.empty()) {char op = ops.front();ops.pop();int b = values.top();values.pop();int a = values.top();values.pop();values.push(applyOp(a, b, op));}}return values.top();
}int main() {string rpn = "2 3 4 * + 5 6 / +";cout << "逆波兰表达式求值结果: " << evaluateRPN(rpn) << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/702706.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web前端学习路线

本文发表于入职啦(公众号: ruzhila) 大家可以访问入职啦学习更多的编程实战。整理了一份关于前端学习的指南&#xff0c;希望对大家有所帮助。 为什么需要学习前端&#xff1f; 本文讲的前端是指Web开发前端&#xff0c;不包括Android、iOS、小程序等移动端开发。 当前的浏览…

Tomcat安装与配置(详细教程)

一、安装Tomcat服务器 1.下载地址&#xff08;Tomcat官网&#xff09;http://tomcat.apache.org/ 2.将下载的zip文件解压到指定的目录&#xff08;例如&#xff1a;D盘&#xff0c;目录不要有中文&#xff09; D:\apache-tomcat-9.0.43 二、配置Tomcat环境变量 &#xff08;…

性价比王者HUSB237,极简PD Sink的“瘦身秘籍”

在小型化、高集成的要求下&#xff0c;慧能泰取电芯片进行技术升级后“瘦身成功”&#xff0c;推出最新一代极具性价比的最简PD Sink取电芯片——HUSB237。 图1&#xff1a;HUSB237 demo及封装图 HUSB237 是一款极具性价比的最简PD Sink取电芯片&#xff0c;支持PD3.1协议包含…

AI“源神”启动!Llama 3发布,开闭源之争战局生变

在AI的世界里&#xff0c;开源与闭源的较量一直是科技界的热门话题。 今年年初&#xff0c;埃隆马斯克在对OpenAI及其CEO萨姆奥特曼提起诉讼时&#xff0c;就对OpenAI逐渐不公开其模型研究相关细节的行为大加谴责。“时至今日&#xff0c;OpenAI公司网站还宣称&#xff0c;它的…

哪个牌子的超声波清洗机好?四大质量出众超声波清洗机汇众

由于科技的进步&#xff0c;超声波清洗机已经成为了家庭和专业场所不可或缺的高效清洁工具。它利用超声波波动产生的微小气泡来清洁物品表面及细缝中的污渍&#xff0c;实现深层次的清洁效果。特别是对于眼镜这样的精密物品&#xff0c;定期进行深度清洁不仅能够确保视觉的清晰…

2024年软考模拟练习平台(保姆级教程分享)

2024年上半年机考模拟系统已经开放&#xff0c;2024年上半年的考生请注意&#xff1a; 1.面向对象&#xff1a;参加2024年上半年计算机软件资格考试的考生 2.机考模拟时间&#xff1a;2024年5月13日9:00至5月23日17&#xff1a;00 注意&#xff1a;模拟作答系统是计算机技术…

new delete用法它们与 malloc free 的区别

文章目录 new 和 delete的用法operate new() operate delete() new delete 和 malloc free的区别new[] delete[] 的含义 new 和 delete的用法 基本写法&#xff0c;new也是先申请空间 这里的new和malloc用的地方一样但是new用起来代码简洁不少而且不需要强转和指定大小 int m…

“Linux”目录结构and配置网络

了解完命令格式和vi、vim编辑器后&#xff0c;我们来认识一下目录的结构&#xff1a; 一、目录 &#xff08;1&#xff09;目录的特点 windows特点&#xff1a; Windows中有C、D、E盘&#xff0c;每个都是一个根系统 Linux特点&#xff1a; linux中只有一个根&#xff08;单…

研究变压器感应耐压试验电源的能效和节能潜力

变压器感应耐压试验电源 变压器感应耐压试验电源在电源行业中是一种非常重要的设备&#xff0c;用于测试和验证变压器的绝缘性能。变压器感应耐压试验电源是一种专门为变压器感应耐压试验而设计的电源设备。它的工作原理基于变压器的感应原理&#xff0c;利用感应电压来对变压器…

打开指定文件夹下的jupyter

cd到相应路径&#xff0c;输入jupyter notebook ./ 注意./ 非常重要&#xff0c;不然又进了默认文件夹

Pytorch深度学习入门--1.Tensor基础

一、Tensor Tensor,中文叫做张量&#xff0c;它是Pytorch中最基本的数据类型&#xff0c;同时也是最重要的数据类型 二、数学含义 在数学中&#xff0c;标量是只有大小没有方向的量。例如&#xff0c;1,2&#xff0c;3等。向量是既有大小又有方向的量。例如&#xff0c; &am…

【案例】使用Vue实现拖拽课表

效果展示 效果说明 点击左侧的课程并进行拖拽&#xff0c;拖拽到要开设本课程的地方然后松手&#xff0c;即可将本节课设置为当前所拖拽的科目并且背景色为当前科目的背景色&#xff0c;当多次拖拽到同一节课的时候将会实现后者覆盖前者的效果。 效果实现代码 第一步&#x…