吃透 C++ Stack 与 Queue:接口介绍 + 基础操作 + 实战习题

🔥小叶-duck:个人主页

❄️个人专栏:《Data-Structure-Learning》

《C++入门到进阶&自我学习过程记录》

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

一、搞懂基础:Stack 与 Queue 的核心特性

二、Stack(栈):后进先出(LIFO)的容器

1、核心特性

2、头文件和定义

3、常用接口使用

4、基础用法代码演示

三、Queue(队列):先进先出(FIFO)的容器

1、核心特性

2、头文件与定义

3、常用接口使用

4、基础用法代码演示

四、实战练习题

1、最小栈

2、栈的压入、弹出序列

3、逆波兰表达式求值

4、 二叉树的层序遍历

结束语


一、搞懂基础:Stack 与 Queue 的核心特性

在介绍相关接口以及测试代码前,首先要明确两者的 “数据访问规则”—— 这是它们区别于其他容器的关键:

容器核心规则访问特性适用场景
stack后进先出(LIFO)仅能访问“栈顶”元素函数调用栈、表达式求值、撤销操作
quene先进先出(FIFO)仅能访问“队头”和“队尾”元素任务调度、消息队列、广度优先搜索(BFS)

两者的共性是 “限制访问”:不支持随机访问(如[]下标),也不支持迭代器遍历 —— 目的是强制遵循其数据规则,避免错误的访问方式

二、Stack(栈):后进先出(LIFO)的容器

1、核心特性

  • 访问规则:只能从"栈顶"添加或删除元素(最后入栈的元素最先出栈)
  • 适用场景:函数调用栈,表达式求值等。

参考文档:stack - C++ Reference

2、头文件和定义

#include <stack> //必须包含栈的头文件 using namespace std; //定义栈:默认存储int类型,底层依赖deque实现 stack<int> st; //可指定底层容器(如vector、list) stack<int, vector<int>> st_v; // 基于vector的栈 stack<int, list<int>> st_lt; // 基于list的栈

3、常用接口使用

接口功能描述示例
push(val)向栈顶添加元素,新元素成为新的栈顶st.push(10);
pop()删除当前栈顶元素(操作后原栈顶的下一个元素成为新栈顶),无返回值,需先确保栈非空st.pop();
top()返回栈顶元素的引用(可直接读取或修改栈顶值),需先确保栈非空

int x = st.top(); (读取);

st.top() = 20;(修改)

size()返回栈中当前存储的元素总个数,返回值为无符号整数(size_t)

cout << st.size();

empty()判断栈是否为空,若栈中无元素则返回 true,否则返回 false

if (!st.empty()) { ... }

4、基础用法代码演示

void test_stack() { stack<int> st; st.push(1); st.push(2); st.push(3); st.push(4); while (!st.empty()) { cout << st.top() << " "; st.pop(); } cout << endl; } int main() { test_stack(); }

三、Queue(队列):先进先出(FIFO)的容器

1、核心特性

  • 访问规则:从"队尾"添加元素,从"队头"删除元素(最先入队的元素最先出队)
  • 适用场景:任务调度(如打印队列)、消息队列、广度优先搜索(BFS)等

参考文档:queue - C++ Reference

2、头文件与定义

#include <queue> //必须包含的头文件 using namespace std; //定义队列:默认底层依赖deque实现 queue<int> q; //可指定底层容器(如list,不建议用vector,因vector头删效率低) queue<int, list<int>> q_lt; // 基于list的队列

3、常用接口使用

接口功能描述示例
push(val)向队列的队尾添加一个元素,新元素成为队列的最后一个元素,操作后队列长度+1q.push(10);
pop()删除队列的队头元素(即最早入队的元素),操作后队列长度-1,无返回值(需先通过front()获取队头元素再删除)q.pop();
front()返回队列队头元素的引用(可读取或修改),仅访问不删除,需确保队列非空

int x = q.front(); (读取);

q.front() = 20;(修改)

back()返回队列队尾元素的引用(可读取或修改),仅访问不删除,需确保队列非空

int x = q.back(); (读取);

q.back() = 30;(修改)

size()返回队列中当前存储的元素总个数,返回值类型为 size_t(无符号整数)

cout << q.size();

empty()

判断队列是否为空:若队列中无元素则返回 true,有元素则返回 false,常用于遍历或删除前判断队列状态

if (!q.empty()) { ... }

4、基础用法代码演示

void test_queue() { queue<int> q; q.push(1); q.push(2); q.push(3); q.emplace(4); while (!q.empty()) { cout << q.front() << " "; q.pop(); } cout << endl; } int main() { test_queue(); }

四、实战练习题

1、最小栈

题目链接:

155. 最小栈 - 力扣(LeetCode)

C++算法代码:

class MinStack { public: MinStack() //调用构造函数进入函数体之前都会进行初始化列表 //如果没有显式写初始化列表对于内置类型不确定是否初始化 //对于自定义类就会调用对应的默认构造函数 { //所以可以不用写该函数 } void push(int val) { st.push(val); if(min_st.empty() || min_st.top() >= val) { min_st.push(val); } } void pop() { if(min_st.top() == st.top()) { min_st.pop(); } st.pop(); } int top() { return st.top(); } int getMin() { return min_st.top(); } stack<int> st; stack<int> min_st; };

2、栈的压入、弹出序列

题目链接:

栈的压入、弹出序列_牛客题霸_牛客网

C++算法代码

class Solution { public: bool IsPopOrder(vector<int>& pushV, vector<int>& popV) { stack<int> st; size_t _push = 0; size_t _pop = 0; while(_push < pushV.size()) { st.push(pushV[_push]); while(!st.empty() && st.top() == popV[_pop]) { st.pop(); _pop++; } _push++; } return st.empty(); } };

图解

3、逆波兰表达式求值

题目链接:

150. 逆波兰表达式求值 - 力扣(LeetCode)

补充说明

C++算法代码

class Solution { public: int evalRPN(vector<string>& tokens) { for(auto str : tokens) //需要注意vector里面的数据是string类型 //下面的判断条件不要写错 //访问字符需要写出str[0],因为每个string数据只有一个字符 { if(str == "+" || str == "-" || str == "*" || str == "/") { int right = st.top(); st.pop(); int left = st.top(); st.pop(); switch(str[0]) { case '+': st.push(left + right); break; case '-': st.push(left - right); break; case '*': st.push(left * right); break; case '/': st.push(left / right); break; } } else { st.push(stoi(str)); //stoi可将字符串转换为整数 } } return st.top(); } stack<int> st; };

4、 二叉树的层序遍历

题目链接:

102. 二叉树的层序遍历 - 力扣(LeetCode)

C++算法代码

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> vv; queue<TreeNode*> q1;//队列用来存放每层的数据 size_t levelSize = 0; if(root) { q1.push(root); levelSize = 1; }//如果不是空树首先将头节点入队列 while(!q1.empty()) //q1如果为空则说明树的所有数据已经全部遍历 { vector<int> v; while(levelSize--) { TreeNode* front = q1.front(); v.push_back(front->val); if(front->left) { q1.push(front->left); //如果该节点有对应左孩子结点则入队列 } if(front->right) { q1.push(front->right); //如果该节点有对应右孩子结点则入队列 } q1.pop(); } vv.push_back(v); //当出了while循环说明当前层的数据已全部传入v中,则作为一组传给vv levelSize = q1.size(); } return vv; } };

图解

结束语

stack(栈)和 queue(队列)是 C++ 标准库中两种常用的适配器容器,它们的核心价值在于提供严格的数据访问规则(后进先出 / 先进先出),广泛应用于算法设计和业务逻辑实现。到此 stack 和 queue 的相关接口使用和相关算法题就讲解完了,相比于前面学习的所有容器,栈和队列在接口使用上是非常简单的,本篇文章主要是对栈和队列的相关算法题进行讲解,下篇文章我们就要对栈和队列进行模拟实现。希望这篇文章对大家学习C++能有所帮助!

C++参考文档:
https://legacy.cplusplus.com/reference/
https://zh.cppreference.com/w/cpp
https://en.cppreference.com/w/

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

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

相关文章

2025年河南管城区代理记账公司权威推荐榜单:新密代理记账‌/郑东新区代理记账‌/巩义代理记账‌源头公司精选

随着河南省营商环境的持续优化与数字经济的高速发展,企业财税服务市场正经历深刻的智能化与规范化变革。行业数据显示,河南省中小企业对代理记账服务的需求近年来保持稳定增长。在这一背景下,选择一家具备专业资质、…

IDEA(2020版)sevlet+session实现购物车功能

IDEA(2020版)sevlet+session实现购物车功能查看全文:IDEA(2020版)sevlet+session实现购物车功能 – 每天进步一点点 【任务目标】 通过所学Session知识以及购物车的访问流程,以购买蛋糕为例,模拟实现购物车功能。 …

​降血脂降血压产品前十推荐,长期深受三高问题困扰遇新发现!个人真实分享

如果你身边也有人在为血压忽高忽低发愁、为体检报告上的胆固醇红字叹气、或是每天爬楼都会心慌气短,那么你一定能理解—— 心脑血管的事,从来不是“小事”。过去一年,我把注意力放在了十款热度极高的营养补充剂上,…

2025年储罐订做厂家权威推荐榜:贮罐厂商/化工储罐/不锈钢储罐源头厂家精选

在现代化工、能源、供热及众多工业生产流程中,储罐作为核心的存储与缓冲设备,其设计与制造质量直接关系到生产安全、物料品质、能源效率和环境合规。无论是储存腐蚀性化学品、高温导热油,还是作为采暖系统的关键部件…

element-ui的table跨行合并

效果图代码<template><el-container class="car-head"><el-header height="auto"><el-form :inline="true":model="formObj"@submit.native.preventlab…

2025 年 12 月红木家具/东方红木家居权威推荐榜:传承经典,匠心独运的品质之选!

2025 年 12 月红木家具/东方红木家居权威推荐榜:传承经典,匠心独运的品质之选! 随着人们对生活品质追求的不断提升,红木家具因其独特的文化内涵和精湛的工艺,越来越受到消费者的青睐。为了帮助筛选红木家居/红木家…

2025年佛山床垫品牌源头厂家精选推荐

在选择合适的硬底护脊床垫时,了解不同品牌和厂家提供的服务至关重要。本篇文章深入探讨了佛山地区多个知名床垫品牌,包括大森林电子商务有限公司和冬熊家居等。这些厂家不仅注重产品的质量,还提供灵活的定制服务,以…

2025年LED灯供应商综合推荐榜单:万圣节南瓜灯/酒吧氛围灯/酒吧装饰灯源头厂家精选

随着固态照明技术的成熟与普及,LED照明已成为全球主流照明方案。根据行业数据,LED灯具相较于传统照明产品,可实现50%至80% 的节能效果,其平均寿命可达25,000至50,000小时,远超白炽灯或荧光灯。在绿色制造与节能…

【2025最新】TranslucentTB下载安装及使用教程:任务栏透明神器全面解析(详细步骤 + 常见问题)

本文是 2025 年最新的 TranslucentTB下载安装及使用教程,涵盖任务栏透明、美化模式设置、开机自启配置、托盘菜单使用方法以及常见问题解决方案。提供了经过安全认证的最新版下载地址,并通过图文步骤讲解从安装到进阶…

2025年上海圆锯机企业年度排名:宏萌圆锯机的配件质量好

TOP1 推荐:上海宏萌机械设备有限公司 推荐指数:★★★★★ 口碑评分:长三角精密圆锯机企业 专业能力:上海宏萌机械设备有限公司扎根浙江缙云锯床之乡产业底蕴,融合上海创新资源,打造以精准耐用智联为核心的圆锯机…

2025年中国十大专业版权音乐企业推荐:服务不错的版权音乐公

本榜单依托全维度市场调研与真实行业口碑,深度筛选出十家标杆企业,为企业及创作者选型提供客观依据,助力精准匹配适配的版权音乐服务伙伴。 TOP1 推荐:猴子音悦(上海)网络科技有限公司 推荐指数:★★★★★ 口碑…

2025 年 12 月文创/非遗/艺术品推荐榜单:匠心独运的文化瑰宝与艺术精品深度解析

2025 年 12 月文创/非遗/艺术品推荐榜单:匠心独运的文化瑰宝与艺术精品深度解析 随着文化产业的蓬勃发展,文创、非遗和艺术品市场日益繁荣。为了帮助筛选出优质的品牌,特此发布权威推荐榜单,该榜单也已在行业协会官…

2025 年 12 月红木办公家具权威推荐榜单:精选红木办公桌/老板桌/大班台,办公椅,书桌椅,书房套装,文件柜品牌!

2025 年 12 月红木办公家具权威推荐榜单:精选红木办公桌/老板桌/大班台,办公椅,书桌椅,书房套装,文件柜品牌! 随着红木家具市场的不断发展,越来越多的企业和消费者开始关注红木办公家具。红木办公桌、红木老板桌…

必玩十大网上【小程序休闲游戏】单人易操作不占内存 摸鱼解压全靠它!

忙碌的日常中,谁不需要几款轻松上手、不占内存又能随时摸鱼解压的小游戏呢?今天为大家推荐十款单人易操作、打开即玩的小程序游戏,无需下载、不占空间,适合各种场景轻松休闲! 第一名:《新弹弹堂》 经典弹射竞技游…

聚宽策略想实盘?这个开源项目让你一行代码不改直接跑

聚宽策略想实盘?这个开源项目让你一行代码不改直接跑写了个量化策略,回测年化30%,然后呢?实盘的坑比你想象的多得多。故事的开始 两年前,我遇到了和很多聚宽用户一样的问题:策略回测效果不错,但实盘很麻烦。聚宽…

2025年泉州蹲便疏通打孔公司权威推荐榜单:疏通蹲便‌/蹲便器疏通‌/蹲便疏通口‌源头公司精选

在泉州地区,因长期使用、管道老化或杂物堵塞导致的蹲便器问题是家庭及商业场所中常见的生活难题。根据行业经验,超过80% 的卫生间堵塞问题发生在马桶和蹲便器部位。选择一家技术可靠、响应迅速的专业公司,是快速恢复…

十大爆款小程序休闲游戏:易上手不占空间,摸鱼解压打发时间好伙伴

在快节奏的现代生活中,利用碎片化时间玩上一把轻松有趣的小游戏成了许多人的解压选择。小程序游戏凭借其无需下载、不占空间、即开即玩的特点,迅速成为摸鱼、解压、打发时间的神器。今天,就为大家盘点十款热门的小程…

IDEA(2020版)实现JSP基本语法

IDEA(2020版)实现JSP基本语法查看全文:IDEA(2020版)实现JSP基本语法 – 每天进步一点点在JSP文件中可以嵌套很多内容,例如JSP的脚本元素和注释等,这些内容的编写都需要遵循一定的语法规范。本节将对JSP的基本语法进…

2025 年 12 月码垛机厂家权威推荐榜单:多样板材/倒板/分拣/上料/下料码垛机,全自动与半自动解决方案精选!

2025 年 12 月码垛机厂家权威推荐榜单:多样板材/倒板/分拣/上料/下料码垛机,全自动与半自动解决方案精选! 随着工业自动化技术的不断进步,码垛机在现代制造业中的应用越来越广泛。从多样板材码垛机到倒板码垛机、分…

2025年AI培训权威推荐榜:深度评测与趋势前瞻

引言 AI培训领域鱼龙混杂,课程质量参差不齐,企业如何精准筛选真正优质的培训机构成为一大难题。本榜单从技术实力、课程体系、师资团队、服务保障、实战案例等多维度严格筛选,为您推荐5家标杆机构,助力精准决策。 …
推荐文章