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

栈(线性表2)

后缀表达式 

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main() 
{
    stack<int>stk;
    char ch = '0';//初始化一个随便什么值
    int s = 0, x, y;
    while (ch != '@') {
        ch = getchar();
        switch (ch) {
            case '+': {
                x = stk.top();
                stk.pop();
                y = stk.top();
                stk.pop();
                stk.push(y + x);
                break;
            }
            case '-': {
                x = stk.top();
                stk.pop();
                y = stk.top();
                stk.pop();
                stk.push(y - x);
                break;
            }
            case '*': {
                x = stk.top();
                stk.pop();
                y = stk.top();
                stk.pop();
                stk.push(y * x);
                break;
            }
            case '/': {
                x = stk.top();
                stk.pop();
                y = stk.top();
                stk.pop();
                stk.push(y / x);
                break;
            }
            case '.': {
                stk.push(s);
                s = 0;
                break;
            }
            default: {
                s = s * 10 + ch - '0';
                break;
            }
        }
    }
    cout << stk.top() << endl;

    return 0;
}

注意字符串的处理

括号序列 

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main() 
{
    stack<int>stk;
    bool ok[105];
    string s;
    cin >> s;
    for (int i = 0, k; i < s.length(); i++) {
        if (s[i] == ']') {
            if (stk.empty())continue;
            k = stk.top();
            if (s[k] == '[') {
                ok[k] = ok[i] = 1;
                stk.pop();
            }
        }
        else if (s[i] == ')') {
            if (stk.empty())continue;
            k = stk.top();
            if (s[k] == '(') {
                ok[k] = ok[i] = 1;
                stk.pop();
            }
        }
        else {
            stk.push(i);
        }
    }
    for (int i = 0; i < s.length(); i++) {
        if (ok[i])cout << s[i];
        else {
            if (s[i] == '(' || s[i] == ')')cout << "()";
            else cout << "[]";
        }
    }


    return 0;
}

害,题目看好几遍没理解,一看大佬题解就会了

【深基15.习9】验证栈序列 

#include <iostream>
#include <stack>
#include <string>

using namespace std;
const int N = 100005;
int main()
{
    int q;
    cin >> q;
    int a[N], b[N];
    for (int i = 0; i < q; i++) {
        int n;
        cin >> n;
        stack<int>stk;
        for (int j = 0; j < n; j++)cin >> a[j];
        for (int j = 0; j < n; j++)cin >> b[j];
        
        int k=0;
        for (int j = 0; j < n; j++) {
            stk.push(a[j]);
            while (stk.size() && stk.top() == b[k]) {
                stk.pop();
                k++;
            }
        }
        
        if (!stk.empty()) cout << "No" << endl;
        else cout << "Yes" << endl;
    }


    return 0;
}

注意:这道题不知道为什么一定要我用了数组的时候才能对,有大佬能解释一下吗


http://www.kler.cn/a/441886.html

相关文章:

  • LeetCode hot 力扣热题100 排序链表
  • 微服务学习:基础理论
  • STL--set(集合)
  • ORB-SLAM2源码学习:ORBmatcher.cc⑥: int ORBmatcher::Fuse将地图点投影到关键帧中进行匹配和融合
  • 设计模式-单例模式
  • python编程-OpenCV(图像读写-图像处理-图像滤波-角点检测-边缘检测)边缘检测
  • 关于opengauss
  • 《半导体芯片制程:微观世界里的科技风云》
  • 蓝桥杯数列求值(2019试题C)
  • 【系统】Windows11更新解决办法,一键暂停
  • 安卓课设版算法计算器
  • 用.Net Core框架创建一个Web API接口服务器
  • lambda 表达式 闭包写法
  • 模具生产过程中的标签使用流程图
  • 前端的Python入门指南(完):错误和异常处理策略及最佳实践
  • YOLOv9-0.1部分代码阅读笔记-activations.py
  • 亚远景-实施ASPICE标准:全面提升汽车软件开发质量与效率的策略
  • leetcode二叉搜索树部分笔记
  • MySQL 中 Varchar(50) 和 varchar(500) 区别是什么?
  • 概率论深入学习书单
  • Halcon 直连相机
  • Excel加载项入门:原理、安装卸载流程与常见问题
  • CSS Grid 布局:属性及使用详解
  • qemu源码解析【总目录】
  • C/C++ 查找算法
  • 入探讨网络安全:技术与策略的双重防线深