当前位置: 首页 > news >正文

蓝桥杯STL stack

STL stack 概述

栈(stack)是一种遵循**后进先出(LIFO)**原则的线性数据结构,仅允许在栈顶进行插入和删除操作。STL(Standard Template Library)中的 stack 是一个容器适配器,基于其他容器(如 dequelist)实现,默认使用 deque 作为底层容器。


栈的基本操作

初始化栈

STL stack 的初始化需要包含头文件 <stack>,并指定元素类型。

#include <stack>
using namespace std;stack<int> s; // 初始化一个存储整数的栈

入栈操作(push)

将元素添加到栈顶。

s.push(10); // 栈内元素: [10]
s.push(20); // 栈内元素: [10, 20]
s.push(30); // 栈内元素: [10, 20, 30]

出栈操作(pop)

移除栈顶元素,但不返回其值。

s.pop(); // 移除30,栈内元素: [10, 20]

访问栈顶元素(top)

返回栈顶元素的值,但不移除它。

int top_element = s.top(); // top_element = 20

检查栈是否为空(empty)

返回布尔值,判断栈是否为空。

bool is_empty = s.empty(); // 栈不为空,is_empty = false

获取栈的大小(size)

返回栈中元素的个数。

int stack_size = s.size(); // stack_size = 2


栈的典型应用场景

  1. 括号匹配问题
    检查表达式中的括号是否匹配,例如 {[()]} 是合法的,而 {[(])} 是非法的。

  2. 表达式求值
    实现中缀表达式转后缀表达式(逆波兰表达式),并计算其值。

  3. 深度优先搜索(DFS)
    用栈模拟递归过程,避免递归调用带来的额外开销。


蓝桥杯真题示例:括号匹配问题

问题描述

给定一个只包含 ()[]{} 的字符串,判断其括号是否匹配。

解决思路
  1. 遍历字符串,遇到左括号((, [, {)时入栈。
  2. 遇到右括号时,检查栈顶是否是对应的左括号:
    • 如果是,弹出栈顶。
    • 如果不是,直接返回不匹配。
  3. 遍历结束后,栈为空则匹配,否则不匹配。
完整代码
#include <iostream>
#include <stack>
#include <string>
using namespace std;bool is_valid(string s) {stack<char> st;for (char c : s) {if (c == '(' || c == '[' || c == '{') {st.push(c);} else {if (st.empty()) return false;char top = st.top();if ((c == ')' && top == '(') || (c == ']' && top == '[') || (c == '}' && top == '{')) {st.pop();} else {return false;}}}return st.empty();
}int main() {string s = "{[()]}";cout << (is_valid(s) ? "Valid" : "Invalid") << endl;return 0;
}


蓝桥杯解题通用思路

  1. 理解题意
    明确题目要求,例如输入输出格式、边界条件(如空栈、非法输入等)。

  2. 选择数据结构
    根据问题特性选择栈或其他数据结构。栈适合处理对称性或递归性质的问题。

  3. 设计算法
    将问题分解为栈的基本操作(如入栈、出栈、匹配等)。

  4. 编写代码
    实现算法,注意边界条件和异常处理。

  5. 测试验证
    通过样例测试和边界测试(如空输入、极端数据)验证代码正确性。


总结

STL stack 是解决一类特定问题(如括号匹配、表达式求值、DFS)的高效工具。在蓝桥杯竞赛中,熟练掌握栈的操作和应用场景能够帮助快速解决相关问题。通过实际代码示例和解题思路的训练,可以提升对栈的理解和运用能力。

http://www.lryc.cn/news/621273.html

相关文章:

  • 图论(5)最小生成树算法
  • 我的 LeetCode 日记:Day 37 - 解锁动态规划:完全背包问题
  • opencv基础学习与实战(2)
  • 基于 LDA 模型的安徽地震舆情数据分析
  • Docker build创建镜像命令入门教程
  • 地测管理部绩效考核关键指标与地质数据分析
  • 码上爬第九题【协程+webpack】
  • C++基础(①入门教程)
  • K8s学习----Namespace:资源隔离与环境管理的核心机制
  • **标题:发散创新,探索编程中的平衡设计****摘要**:本文将探讨如何在编程中运用平衡设计思想,通过实例分析与
  • 37 C++ STL模板库6-string_view
  • 设计模式笔记_行为型_责任链模式
  • 仓颉编程语言的Any 类型(Any 接口)
  • Video-R1论文解读
  • 使用keil5 自带的仿真观察GPIO口波形
  • lib.dom.d.ts
  • 《量子雷达》第4章 量子雷达的检测与估计 预习2025.8.14
  • Windows bypassUAC 提权技法详解(一)
  • ACCESS多个时间段查询,只取整点,30分数据
  • 【读代码】深度解析 context-engineering-intro:开源上下文工程实践原理与应用
  • 【Functions】enumerate的用法
  • 机器学习-基础入门:从概念到核心方法论
  • Data Augmentation数据增强
  • 从0到1:C++ 语法之 nullptr
  • 机器学习内容总结
  • 机器学习初学
  • 前端vue框架
  • 机器学习知识总结
  • 智能体评测技术与实践:从评估维度到DeepEval实战指南
  • 20250814,通义万相,无限生成权限(慢速)