栈解决中缀表达式转后缀表达式_第3章栈和队列,中缀表达式转换成后缀表达式...

46eb045209e2f9fdff762762e1cb9a91.png

while (从exp读取字符ch,ch!='\0')

{  ch为数字:将后续的所有数字均依次存放到postexp中,

            并以字符'#'标志数值串结束;

   ch为左括号'(':将此括号进栈到Optr中;

   ch为右括号')':将Optr中出栈时遇到的第一个左括号'('以前的运算符依次出

            栈并存放到postexp中,然后将左括号'('出栈;

   ch为其他运算符:

       if (栈空或者栈顶运算符为'(') 直接将ch进栈;

       else if (ch的优先级高于栈顶运算符的优先级)

     直接将ch进栈;

       else

     依次出栈并存入到postexp中,直到栈顶运算符优先级小于ch的

            优先级,然后将ch进栈;

}

若exp扫描完毕,则将Optr中所有运算符依次出栈并存放到postexp中。

while (从exp读取字符ch,ch!='\0')

{   ch为数字:将后续的所有数字均依次存放到postexp中,

             并以字符'#'标志数值串结束;

    ch为左括号'(':将此括号进栈到Optr中;

    ch为右括号')':将Optr中出栈时遇到的第一个左括号'('以前的运算符

             依次出栈并存放到postexp中,然后将左括号'('出栈;

    ch为'+'或'-':出栈运算符并存放到postexp中,直到栈空或者栈顶为'(',

             然后将'+'或'-'进栈;

    ch为'*'或'/':出栈运算符并存放到postexp中,直到栈空或者栈顶

             为'('、'+'或'-',然后将'+'或'-'进栈;

}

若exp扫描完毕,则将Optr中所有运算符依次出栈并存放到postexp中。

8cd90fdf619e032b8378afb9898e09bf.gif

中缀表达式转后缀表达式的过程可以使用的特性来实现。具体步骤如下: 1. 创建一个和一个输出队列。 2. 从左到右扫描中缀表达式的每个元素。 3. 如果遇到操作数(数字),则将其添加到输出队列。 4. 如果遇到左括号,将其压入。 5. 如果遇到操作符(包括加减乘除等),则: - 如果为空,或者栈顶元素为左括号,则将操作符压入。 - 如果操作符的优先级高于栈顶操作符,则将操作符压入。 - 如果操作符的优先级低于或等于栈顶操作符,则将栈顶操作符弹出并添加到输出队列,直到栈顶操作符的优先级小于该操作符或者为空,然后将该操作符压入。 6. 如果遇到右括号,则将的操作符依次弹出并添加到输出队列,直到遇到左括号为止。将左括号弹出,但不添加到输出队列。 7. 重复步骤2至6,直到扫描完整个中缀表达式。 8. 如果还有操作符,则依次弹出并添加到输出队列。 9. 输出队列的元素就是转换后的后缀表达式。 参考资料: 下面是一个具体的例子来说明这个过程: 中缀表达式:1 (2-3)*4 10/5 通过实现中缀表达式转后缀表达式的过程如下: 1. 扫描到1,将其添加到输出队列。 2. 扫描到左括号(,将其压入。 3. 扫描到2,将其添加到输出队列。 4. 扫描到减号-,为空,将减号压入。 5. 扫描到3,将其添加到输出队列。 6. 扫描到右括号),将的操作符弹出并添加到输出队列,直到遇到左括号为止。弹出减号并添加到输出队列。 7. 扫描到乘号*,为空,将乘号压入。 8. 扫描到4,将其添加到输出队列。 9. 扫描到空格,继续。 10. 扫描到10,将其添加到输出队列。 11. 扫描到除号/,的乘号优先级高于除号,将乘号弹出并添加到输出队列。 12. 扫描到5,将其添加到输出队列。 13. 扫描完整个中缀表达式的操作符乘号是最后一个,将其弹出并添加到输出队列。 14. 输出队列为:1 2 3 - 4 * 10 5 / 因此,中缀表达式转换为后缀表达式为:1 2 3 - 4 * 10 5 /<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值