STL--后缀表达式之栈的特性与使用
2026/7/22 2:37:26 网站建设 项目流程

题目描述

输入一行表示后缀表达式,注意每个数或符号之间有一空格隔开,最后输入@表示输入结束。(给定的表达式不超过 10001000 个字符)

注意:本题中遇到除法运算,只需要计算整除的结果,不需要保留小数。

输入

将输入的后缀表达式求值后输出。

测试数据保证表达式中整数数值 以及 整数之间进行加减乘除运算得到的结果都在 00~108108的范围内。

输出

输出一个整数,表示该表达式的值。

样例

输入
14 3 20 5 / * 8 - + @
输出
18
#include<iostream> #include<stack> #include<string> using namespace std; int main(){ stack<int> a; string s; int p,q,w; while(cin >> s && s != "@"){ if(s == "+" || s == "-" || s == "*" || s == "/") { q = a.top(); a.pop(); p = a.top(); a.pop(); if(s == "+") w = p + q; else if(s == "-") w = p - q; else if(s == "*") w = p * q; else if(s == "/") w = p / q; a.push(w); } else a.push(stoi(s)); } cout << a.top(); }

后缀表达式求值的核心数据结构是,规则非常简单:

  1. 从左到右逐个遍历表达式里的元素
  2. 如果遇到数字,就把它压入栈中
  3. 如果遇到运算符,就从栈顶弹出两个元素:
    • 先弹出的是右操作数b,后弹出的是左操作数a
    • 计算a 运算符 b的结果(比如遇到+就算a+b,遇到/就算a//b
    • 把计算得到的新结果重新压入栈中
  4. 遍历结束之后,栈里只会剩下一个元素,这个元素就是整个后缀表达式的最终结果。

这道后缀表达式求值题目,核心用到了C++ STL里的std::stack容器适配器。

  1. push():把读取到的数字压入栈顶
  2. top():获取栈顶的元素,拿到待运算的操作数
  3. pop():弹出已经参与完运算的栈顶元素
  4. 最后遍历结束后,栈里仅剩的元素就是最终的计算结果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询