2024/1/30 备战蓝桥杯 3-1 栈

目录

小鱼的数字游戏

[P1427 小鱼的数字游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](#P1427 小鱼的数字游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))

表达式括号匹配

[P1739 表达式括号匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](#P1739 表达式括号匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))

【模板】栈

[B3614 【模板】栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)](#B3614 【模板】栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn))


小鱼的数字游戏

P1427 小鱼的数字游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:模拟+stl的stack

关于stack的操作:

std::stack<type> s :定义一个type类型的栈

s.push(x) :把x放入栈中

s.top() :取出栈顶元素,但不删除

s.pop() :删除栈顶元素

s.size() :返回栈中元素的数量

s.empty() :判断栈中是否为空(栈不空:while(!s.empty()) )

完整代码:

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
signed main() {
    int t;
    std::stack<int> s;
    while (std::cin >> t) {
        if (t == 0)
            break;
        else {
            s.push(t);
        }
    }
    while (!s.empty()) {
        std::cout << s.top() << " ";
        s.pop();
    }
    return 0;
}

表达式括号匹配

P1739 表达式括号匹配 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:模拟+stl的stack

遇到左括号就进栈,遇到右括号并且栈不空的时候,栈顶元素出栈

完整代码:

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
signed main() {
    std::stack<char> st;
    std::string s;
    std::cin >> s;
    int n = s.length();
    s = " " + s;
    int flag = 0;
    for (int i = 1; i <= n; i++) {
        if (s[i] == '(') {
            st.push(s[i]);
        } else if (s[i] == ')' && st.size() != 0) {
            st.pop();
        } else if (s[i] == ')' && st.size() == 0) {
            flag = 1;
        } else if (s[i] == '@') {
            break;
        } else
            continue;
    }
    //std::cout<<flag;
    if (st.empty() && flag == 0) {
        std::cout << "YES\n";
    } else {
        std::cout << "NO\n";
    }
    return 0;
}

【模板】栈

B3614 【模板】栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:模拟+stl的栈

注意:题目中数据输入比较大,可以用字符串来存需要输入的数

完整代码:

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
signed main() {
    int t;
    std::cin >> t;
    while (t--) {
        int n;
        std::cin >> n;
        std::stack<std::string> st;
        std::string s, x;
        for (int i = 1; i <= n; i++) {
            std::cin >> s;
            if (s == "push") {
                std::cin >> x;
                st.push(x);
            }
            if (s == "query") {
                if (st.size() == 0) {
                    std::cout << "Anguei!\n";
                } else {
                    std::cout << st.top() << "\n";
                }
            }
            if (s == "pop") {
                if (st.empty()) {
                    std::cout << "Empty\n";
                } else {
                    st.pop();
                }
            }
            if (s == "size") {
                std::cout << st.size() << "\n";
            }
        }
    }
    return 0;
}
相关推荐
passer__jw7671 小时前
【LeetCode】【算法】3. 无重复字符的最长子串
算法·leetcode
passer__jw7671 小时前
【LeetCode】【算法】21. 合并两个有序链表
算法·leetcode·链表
sweetheart7-72 小时前
LeetCode22. 括号生成(2024冬季每日一题 2)
算法·深度优先·力扣·dfs·左右括号匹配
lb36363636363 小时前
介绍一下数组(c基础)(详细版)
c语言
李元豪3 小时前
【智鹿空间】c++实现了一个简单的链表数据结构 MyList,其中包含基本的 Get 和 Modify 操作,
数据结构·c++·链表
我不是星海3 小时前
1.集合体系补充(1)
java·数据结构
UestcXiye3 小时前
《TCP/IP网络编程》学习笔记 | Chapter 9:套接字的多种可选项
c++·计算机网络·ip·tcp
一丝晨光4 小时前
编译器、IDE对C/C++新标准的支持
c语言·开发语言·c++·ide·msvc·visual studio·gcc
景鹤4 小时前
【算法】递归+回溯+剪枝:78.子集
算法·机器学习·剪枝
_OLi_5 小时前
力扣 LeetCode 704. 二分查找(Day1:数组)
算法·leetcode·职场和发展