C++中缀表达式生成后缀表达式(主要思想)

本文介绍了后缀表达式的基本概念,解释了为什么需要将中缀表达式转换为后缀表达式,并详细阐述了转换算法和计算方法。通过将中缀表达式转换为后缀表达式,利用栈结构简化了计算机对表达式的解析。最后,给出了C++代码示例来演示这一过程。
摘要由CSDN通过智能技术生成

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+c
ab+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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值