news 2026/6/9 18:52:05

csp信奥赛C++标准模板库STL(8):stack的使用详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
csp信奥赛C++标准模板库STL(8):stack的使用详解

csp信奥赛C++标准模板库STL(8):stack的使用详解

一、什么是栈?

栈是一种后进先出(LIFO,Last In First Out)的数据结构,类似于现实生活中的一叠盘子或书籍。

二、栈的基本特性

  1. 只能在栈顶进行插入和删除操作
  2. 插入操作:称为入栈(push)
  3. 删除操作:称为出栈(pop)
  4. 访问操作:只能访问栈顶(top)元素

三、C++ STL 中的 stack

定义和初始化
#include<stack>// 基本定义stack<int>s1;// 默认使用deque作为底层容器// 初始化为另一个栈的副本stack<int>s2(s1);

四、stack 的主要成员函数

方法功能时间复杂度
push(x)将元素x压入栈顶O(1)
pop()弹出栈顶元素O(1)
top()返回栈顶元素O(1)
empty()判断栈是否为空O(1)
size()返回栈中元素个数O(1)

五、基本操作示例

#include<iostream>#include<stack>usingnamespacestd;intmain(){stack<int>s;// 入栈操作s.push(10);s.push(20);s.push(30);// 查看栈顶元素cout<<"栈顶元素: "<<s.top()<<endl;// 输出: 30// 查看栈的大小cout<<"栈的大小: "<<s.size()<<endl;// 输出: 3// 出栈操作s.pop();cout<<"出栈后栈顶元素: "<<s.top()<<endl;// 输出: 20// 判断栈是否为空if(!s.empty()){cout<<"栈不为空"<<endl;}// 遍历栈(注意:遍历会清空栈)cout<<"栈中元素(从栈顶到栈底): ";while(!s.empty()){cout<<s.top()<<" ";s.pop();}// 输出: 20 10cout<<endl;return0;}

六、信奥赛中栈的常见应用

案例1. 括号匹配问题
boolisValid(string s){stack<char>st;for(charc:s){if(c=='('||c=='['||c=='{'){st.push(c);}else{if(st.empty())returnfalse;chartop=st.top();if((c==')'&&top!='(')||(c==']'&&top!='[')||(c=='}'&&top!='{')){returnfalse;}st.pop();}}returnst.empty();}
案例2. 表达式求值(后缀表达式)
intfun(vector<string>&tokens){stack<int>st;for(string&token:tokens){if(token=="+"||token=="-"||token=="*"||token=="/"){intb=st.top();st.pop();inta=st.top();st.pop();if(token=="+")st.push(a+b);elseif(token=="-")st.push(a-b);elseif(token=="*")st.push(a*b);elsest.push(a/b);}else{st.push(stoi(token));}}returnst.top();}

七、注意事项

  1. 访问前检查空栈:调用top()pop()前务必使用empty()检查

    if(!st.empty()){intval=st.top();st.pop();}
  2. 栈不能直接遍历:需要遍历时,可以复制一份或使用临时栈

    voidprintStack(stack<int>s){// 值传递,不修改原栈while(!s.empty()){cout<<s.top()<<" ";s.pop();}}
  3. 性能考虑:stack的底层默认使用deque,也可以使用vector或list,但各有优劣:

    • deque(默认):两端插入删除高效
    • vector:内存连续,但扩大时需要重新分配
    • list:不需要连续内存,但内存开销较大

总结

栈在信息学奥赛中是非常重要的数据结构,常用于:

  • 括号匹配、表达式求值
  • 深度优先搜索的非递归实现
  • 单调栈解决"下一个更大/小元素"问题
  • 撤销操作、函数调用等场景

掌握栈的应用是提高算法能力的关键一步,建议多练习相关的题目来加深理解。

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}
  • 一、CSP信奥赛C++通关学习视频课:
    • C++语法基础
    • C++语法进阶
    • C++算法
    • C++数据结构
    • CSP信奥赛数学
    • CSP信奥赛STL
  • 二、CSP信奥赛C++竞赛拿奖视频课:
    • 信奥赛csp-j初赛高频考点解析
    • CSP信奥赛C++复赛集训课(12大高频考点专题集训)
  • 三、考级、竞赛刷题题单及题解:
    • GESP C++考级真题题解
    • CSP信奥赛C++初赛及复赛高频考点真题解析
    • CSP信奥赛C++一等奖通关刷题题单及题解

详细内容:

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转


2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

  • 2025 csp-j 复赛真题及答案解析(最新更新)
  • 2025 csp-x(山东) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(河南) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(辽宁) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(江西) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(广西) 复赛真题及答案解析(最新更新)
  • 2020 ~ 2024 csp 复赛真题题单及题解
  • 2019 ~ 2022 csp-j 初赛高频考点真题分类解析
  • 2021 ~ 2024 csp-s 初赛高频考点解析
  • 2023 ~ 2024 csp-x (山东)初赛真题及答案解析
  • 2024 csp-j 初赛真题及答案解析
  • 2025 csp-j 初赛真题及答案解析(最新更新)
  • 2025 csp-s 初赛真题及答案解析(最新更新)
  • 2025 csp-x (山东)初赛真题及答案解析(最新更新)
  • 2025 csp-x (江西)初赛真题及答案解析(最新更新)
  • 2025 csp-x (辽宁)初赛真题及答案解析(最新更新)

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

  • 129 道刷题练习和详细题解,涉及:模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图

4、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 12:06:17

如何高效管理游戏抽卡数据:终极可视化工具指南

如何高效管理游戏抽卡数据&#xff1a;终极可视化工具指南 【免费下载链接】genshin-wish-export biuuu/genshin-wish-export - 一个使用Electron制作的原神祈愿记录导出工具&#xff0c;它可以通过读取游戏日志或代理模式获取访问游戏祈愿记录API所需的authKey。 项目地址: …

作者头像 李华
网站建设 2026/6/6 12:07:41

客户服务升级方案:Kotaemon实现工单自动分类与回复

客户服务升级方案&#xff1a;Kotaemon实现工单自动分类与回复 在客户期望“秒回”的今天&#xff0c;企业客服系统正面临前所未有的压力。一边是不断攀升的咨询量&#xff0c;一边是人力成本高企、响应质量参差不齐的现实困境。尤其在处理售后工单时&#xff0c;传统依赖人工阅…

作者头像 李华
网站建设 2026/6/9 18:41:01

嵌入式信号处理如何突破性能瓶颈?ARM Cortex优化算法库深度解析

在资源受限的嵌入式环境中实现高效信号处理始终是开发者面临的严峻挑战。CMSIS-DSP作为专为ARM Cortex处理器优化的嵌入式计算库&#xff0c;通过架构级适配和算法重构&#xff0c;为这一难题提供了专业解决方案。本文将深入剖析其技术原理、实现机制和实际应用&#xff0c;帮助…

作者头像 李华
网站建设 2026/6/8 9:00:55

Kotaemon支持结果排序权重调节,人工干预更便捷

Kotaemon支持结果排序权重调节&#xff0c;人工干预更便捷 在企业级智能问答系统的实际落地过程中&#xff0c;一个长期存在的矛盾始终难以调和&#xff1a;我们既希望大模型具备强大的语言生成能力&#xff0c;又要求它在专业场景下不“胡说八道”。尤其是在金融、医疗、政务等…

作者头像 李华
网站建设 2026/6/9 18:35:29

Kotaemon与GraphQL整合:灵活查询后端数据服务

Kotaemon与GraphQL整合&#xff1a;灵活查询后端数据服务 在企业级智能问答系统日益复杂的今天&#xff0c;一个核心挑战浮出水面&#xff1a;如何让AI不仅“能说”&#xff0c;还能“说对”&#xff1f;尤其是在金融、医疗、客服等高敏感领域&#xff0c;用户的问题往往涉及动…

作者头像 李华
网站建设 2026/6/6 16:01:27

LaserGRBL终极指南:从零掌握激光雕刻核心技术

LaserGRBL终极指南&#xff1a;从零掌握激光雕刻核心技术 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL LaserGRBL是一款专为GRBL控制器优化的激光雕刻软件&#xff0c;通过直观的图形界面让用户轻松…

作者头像 李华