中缀表达式转后缀表达式(又称逆波兰式)

本文介绍了如何将中缀表达式转换为后缀表达式(逆波兰式),并提供了C++实现的思路。通过使用栈的数据结构,处理数字和运算符的顺序,确保计算的正确性。在遇到括号时,会根据规则调整运算符的处理方式。最终,通过不断比较栈顶运算符的优先级,将中缀表达式如1+3*5-4/2转换为后缀表达式1 3 5 * - 4 2 /。
摘要由CSDN通过智能技术生成

对于常见的 1+3*5-4/2 这种我们常用的表达式我们称为中缀表达式
而还有一种是将运算符放在后面的表达式称为后缀表达式
对于上面这个式子,我们现将计算的顺序用括号补齐,则变为((1+(3*5))-(4/2))
当然加减的顺序看个人喜好了(甚至不加也可以),那我们按照这个顺序将这个中缀表达式变为后缀表达式,则是1 + 3 5 * - 4 2 /

我们要做这个变换(默认补齐了括号),其实思路还是比较好理解的,对于数字的处理相对简单(因为仅就数字而言,输出的顺序是没有变的)
那么剩下的就是对运算符的处理了,加减乘除要按什么顺序输出,这里用到栈的思想就比较容易处理了
首先我们建立两个栈,我称之为a b
a存放运算符,b存放后缀表达式,我们最终直接输出b
先输入一个字符串s,然后对 s 中的每个元素进行逐个处理
如果是数字我们直接加入b,对于(直接加入a,对于)就弹出a中第一个(之后所有元素到b,然后删除这两个括号
那么对于运算符(设为c),我们每次都和a的栈顶进行比较
如果 c 是一级运算符的话,循环弹出栈顶元素到b直到栈顶为(或为空时停止
而 c 是二级运算符的话,栈顶也是二级运算符就弹出栈顶到b,这个操作直到栈顶为一级运算符或为(或为空时停止
最后将 c 加入a

以下是实现的代码

#include<iostrea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值