藍橋杯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.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;顯示每一跳的延遲和…