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.pswp.cn/pingmian/93076.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/93076.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/93076.shtml

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

相关文章

从0到1:飞算JavaAI如何用AI魔法重构MCP服务全生命周期?

摘要 本文详细介绍了如何利用飞算JavaAI技术实现MCP&#xff08;Model Context Protocol&#xff09;服务的创建及通过的全过程。首先阐述了飞算JavaAI的基本概念、特点和优势&#xff0c;接着对MCP服务的需求进行分析&#xff0c;然后按照软件开发流程&#xff0c;从系统设计、…

Webpack Loader 完全指南:从原理到配置的深度解析

掌握 Webpack Loader 的核心机制&#xff0c;解锁前端工程化进阶技能前言&#xff1a;为什么需要理解 Loader&#xff1f; 在现代前端工程化体系中&#xff0c;Webpack 已成为构建工具的事实标准。然而面对非标准 JavaScript 文件或自定义语法时&#xff0c;你是否遇到过 Modul…

读书笔记:《我看见的世界》

《我看见的世界.李飞飞自传》李飞飞 著&#xff0c;赵灿 译个人理解&#xff1a; 是本自传&#xff0c;也是AI的发展史 坚持&#xff0c;总会转机&#xff0c;“一不小心”也许就成了算法、大规模数据、原始算力人工智能似乎一夜之间从一个小众的学术领域爆发成为推动全球变革的…

使用纯NumPy实现回归任务:深入理解机器学习本质

在深度学习框架普及的今天&#xff0c;回归基础用NumPy从头实现机器学习模型具有特殊意义。本文将完整演示如何用纯NumPy实现二次函数回归任务&#xff0c;揭示机器学习底层原理。整个过程不使用任何深度学习框架&#xff0c;每一行代码都透明可见。1. 环境配置与数据生成 impo…

java理解

springboot 打包 mvn install:install-file -Dfile=<path-to-jar> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=jar <path-to-jar> 是你的 JAR 文件的路径。 <group-id> 是你的项目的组 ID。 <…

图论核心算法详解:从存储结构到最短路径(附C++实现)

目录 一、图的基础概念与术语 二、图的存储结构 1. 邻接矩阵 实现思路&#xff1a; 2. 邻接表 实现思路&#xff1a; 应用场景&#xff1a; 时间复杂度分析&#xff1a; 三、图的遍历算法 1. 广度优先搜索&#xff08;BFS&#xff09; 核心思想&#xff1a; 应用场…

力扣top100(day03-02)--图论

本文为力扣TOP100刷题笔记 笔者根据数据结构理论加上最近刷题整理了一套 数据结构理论加常用方法以下为该文章&#xff1a; 力扣外传之数据结构&#xff08;一篇文章搞定数据结构&#xff09; 200. 岛屿数量 class Solution {// DFS辅助方法&#xff0c;用于标记和"淹没&q…

建造者模式:从“参数地狱”到优雅构建

深夜&#xff0c;一条紧急告警刺穿寂静&#xff1a;核心报表服务因NullPointerException全线崩溃。排查根源&#xff0c;罪魁祸首竟是一个拥有10多个参数的“上帝构造函数”。本文将从这个灾难现场出发&#xff0c;引入“链式建造者模式”进行重构&#xff0c;并深入Spring AI、…

jenkins在windows配置sshpass

我的服务器里jenkins是通过docker安装的&#xff0c;jenkins与项目都部署在同一台服务器上还好&#xff0c;但是当需要通过jenkins构建&#xff0c;再通过scp远程推送到别的服务器上&#xff0c;就出问题了&#xff0c;毕竟不是手动执行scp命令&#xff0c;可以手动输入密码&am…

Linux操作系统从入门到实战(十八)在Linux里面怎么查看进程

Linux操作系统从入门到实战&#xff08;十八&#xff09;在Linux里面怎么查看进程前言一、如何识别一个进程&#xff1f;—— PID二、怎么查看进程的信息&#xff1f;方式1&#xff1a;通过/proc目录方式2&#xff1a;用ps命令三、父进程是什么&#xff1f;—— PPID四、bash是…

[TryHackMe](知识学习)---基于堆栈得到缓冲区溢出

1.了解缓冲区溢出WINDOWS程序动态调试工具immunity debuggerhttps://www.immunityinc.com/products/debugger/2.Mona脚本#!/usr/bin/env python3import socket, time, sysip "10.201.99.37"port 1337 timeout 5 prefix "OVERFLOW1 "string prefix &q…

LRU算法与LFU算法

知识点&#xff1a; LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用&#xff0c;它是一种Cache替换算法 Cache的容量有限&#xff0c;因此当Cache的容量用完后&#xff0c;而又有新的内容需要添加进来时&#xff0c; 就需要挑选 并舍弃原有的部分内容&#xf…

目标检测公开数据集全解析:从经典到前沿

目标检测公开数据集全解析&#xff1a;从经典到前沿 一、引言 目标检测&#xff08;Object Detection&#xff09;是计算机视觉领域的核心任务之一&#xff0c;旨在在图像或视频中识别并定位感兴趣的物体。与图像分类不同&#xff0c;目标检测不仅需要判断物体的类别&#xf…

数据备份与进程管理

一、数据备份1.Linux服务器中需要备份的数据&#xff08;1&#xff09;Linux系统重要数据&#xff1a;/root/目录&#xff0c;/home/目录&#xff0c;/etc/目录&#xff08;2&#xff09;安装服务的数据&#xff1a;Apache&#xff08;配置文件&#xff0c;网页主目录&#xff…

docker volume卷入门教程

1. 基础概念 Docker卷是专门用于持久化容器数据的存储方案&#xff0c;独立于容器生命周期。其核心优势包括&#xff1a; 数据持久化&#xff1a;容器删除后数据仍保留跨容器共享&#xff1a;多个容器可访问同一卷备份与迁移&#xff1a;支持直接复制卷数据驱动支持&#xff1a…

计算机网络——协议

1. 计算机网络分层1.1 OSI 7层模型应用层表示层会话层传输层网络层数据链路层物理层1.2 TCP/IP 4 层模型应用层运输层网际层网络接口层1.3 5层体系机构应用层传输层网络层数据链路层物理层2. 应用层协议2.1 HTTP协议2.1.1 基本介绍HTTP&#xff08;HyperText Transfer Protocol…

【React】hooks 中的闭包陷阱

在 React Hooks 中的 闭包陷阱&#xff08;Closure Trap&#xff09;在 useEffect、事件回调、定时器等场景里很常见。1. 闭包陷阱是什么 当你在函数组件里定义一个回调&#xff08;比如事件处理函数&#xff09;&#xff0c;这个回调会捕获当时渲染时的变量值。如果后面状态更…

校园快递小程序(腾讯地图API、二维码识别、Echarts图形化分析)

&#x1f388;系统亮点&#xff1a;腾讯地图API、二维码识别、Echarts图形化分析&#xff1b;一.系统开发工具与环境搭建1.系统设计开发工具后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17小程序&#xff1a; 技术…

Python网络爬虫(二) - 解析静态网页

文章目录一、网页解析技术介绍二、Beautiful Soup库1. Beautiful Soup库介绍2. Beautiful Soup库几种解析器比较3. 安装Beautiful Soup库3.1 安装 Beautiful Soup 43.2 安装解析器4. Beautiful Soup使用步骤4.1 创建Beautiful Soup对象4.2 获取标签4.2.1 通过标签名获取4.2.2 通…

【Linux基础知识系列】第九十四篇 - 如何使用traceroute命令追踪路由

在网络环境中&#xff0c;了解数据包从源主机到目标主机的路径是非常重要的。这不仅可以帮助我们分析网络连接问题&#xff0c;还可以用于诊断网络延迟、丢包等问题。traceroute命令是一个强大的工具&#xff0c;它能够追踪数据包在网络中的路径&#xff0c;显示每一跳的延迟和…