1.后缀表达式是什么
后缀表达式也称逆波兰式(将运算符写在操作数之后)
如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+
(a+b)c-(a+b)/e的后缀表达式为:
(a+b)c-(a+b)/e
→((a+b)c)((a+b)/e)-
→((a+b)c)((a+b)e/)-
→(ab+c)(ab+e/)-
→ab+cab+e/-
2.后缀表达式有什么作用
实现逆波兰式的算法,难度并不大,但为什么要将看似简单的中序表达式转换为复杂的逆波兰式?原因就在于这个简单是相对人类的思维结构来说的,对计算机而言中序表达式是非常复杂的结构。相对的,逆波兰式在计算机看来却是比较简单易懂的结构。因为计算机普遍采用的内存结构是栈式结构,它执行先进后出的顺序
3.算法实现
1.首先需要一个队列存放操作数,一个栈临时存放运算符
2.从中缀式的左端开始取字符,若字符为操作数,直接压入队列;
3.若取出的字符为运算符,若此时栈为空则放入栈中,若栈不为空,和栈顶的元素比较优先级。若字符优先级大于栈顶元素则入栈,否则不断弹出栈顶元素压入队列,直到栈顶元素优先级低于取出的字符。
4.取出表达式所有字符后将栈里的元素全部弹出,依次压入队列。
完成以上步骤队列弹出队列就是原表达式的逆波兰式。
4.计算方法
1.声明一个栈临时存放操作数。依次弹出队列,若弹出元素为操作数,直接入栈。
2.若弹出元素为操作符则将栈中元素弹出按照运算符运算。再将运算结果入栈。
3.循环操作,队列中元素全部弹出后即可得到计算结果。
5.代码
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
//自定义判断优先级
bool isSuperior(string s,stack<string>t)
{
}
int main(