数据结构栈之计算后缀表达式
Posted zhchoutai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构栈之计算后缀表达式相关的知识,希望对你有一定的参考价值。
对于一个给定的后缀表达式,(如果它是合法的)
注意:次算法是基于基本操作符是2元操作符且操作数为一位正整数!
其求值的基本思想是:对于给定的表达式进行遍历,假设遇到的是操作数就将其压入栈;假设遇到的是操作符,将栈顶的两个元素弹出,假设栈顶两个元素依次为a,b(a在上b在下),将次操作符应用于这两个栈顶元素,比方b-a(注意b在左a在右)然后将计算结果压入栈(用来充当下一个操作符的操作数);
最后输出栈顶元素即为结果(事实上假设表达式合法终于栈里面一定会仅仅有一个元素)
#include <stdio.h> //后缀表达式求值 #include <iostream> #include <cstring> #include <stack> #include <ctype.h> #include <algorithm> using namespace std; int main() { char c; stack <int> s; while(scanf("%c",&c)!=EOF) { if(c==‘#‘)break; if(isdigit(c)) s.push(c-‘0‘); else { int a=s.top(); s.pop(); int b=s.top(); s.pop(); switch(c) { case ‘+‘:s.push(b+a);break; case ‘-‘:s.push(b-a);break; case ‘*‘:s.push(b*a);break; case ‘/‘:s.push(b/a);break; } } } cout<<s.top()<<endl; return 0; }
以上是关于数据结构栈之计算后缀表达式的主要内容,如果未能解决你的问题,请参考以下文章