C++中缀表达式转后缀表达式

一、中缀表示转后缀表示的规则

1.遇到操作符时,如果该操作符优先级高于op_stack栈顶的操作符,则直接压入op_stack,如果同级或低于栈顶操作符,则将栈中操作符依次弹出(同时压入输出栈),直到遇到比当前操作符优先级低的,或者遇到了"("。

2."("和")"都不能进入输出栈。

3.对于操作符"(",只有")"才能将其弹出,其他情况不弹出"("。

二、中缀表达式a+(b+c)*d-e的转换后缀表达式的步骤:

(1). 首先初始化两个栈:输出栈out_stack和操作符栈op_stack

(2). 从左至右扫描表达式,遇到操作数则直接压入输出栈,在遇到a时,由于是操作数,将"a"压入out_stack

(3).扫描到"+",由于当前的操作符栈空,直接压入op_stack

(4). 然后读取到"(",由于它的优先级是最高的,直接压入栈。

(5). 然后读取到操作数"b",压入输出栈 out_stack。

(6). 继续读取到 "+" ,当前操作符栈的栈顶是"(",因为只有")"才能将其弹出,所以"+"入栈。

(7). 读取的"c"压入输出栈。

(8). 读取到了")",此时开始将操作符栈的操作符依次弹出(同时压入输出栈),直到遇到第一个"(",将"("弹出。

(9). 然后读取到" * ",当前操作符栈的栈顶是"+",优先级低于" * ",所以直接压入栈。

(10). 读取的"d"压入输出栈

(11). 读取到"-",当前栈顶是" * ",比"-"的优先级高,所以" * "弹出(同时压入输出栈,下同),然后栈顶"+"的优先级和"-"相同,也要弹出。此时操作符栈空,"-"压入

(12). 读取到了"e",压入输出栈,此时表达式读取完毕,将操作符栈依次弹出并压入输出栈,完成了转换,输出为abc+d*+e-。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值