用栈将中缀表达式转化为后缀表达式

本文介绍了如何使用栈将中缀表达式转换为后缀表达式。后缀表达式,也称为逆波兰表达式,不使用括号来指示操作符优先级。以中缀表达式a*(b+c)为例,详细阐述了转换过程,并通过栈实现计算后缀表达式的方法。同时,提出了中缀转后缀的算法,涉及操作数入栈、运算符优先级判断和括号处理等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

中缀表达式就是我们通常使用的表达式。
后缀表达式,又称为逆波兰表达式,所有操作符置于操作数的后面,且不需要括号来标示操作符的优先级
举个例子:中缀表达式为a*(b+c),其对应的后缀表达式为abc+*。

那么,后缀表达式如何计算呢?用栈。以后缀表达式abc+*为例:
从左向右依次扫描。
操作数入栈,a入栈,b入栈,c入栈;遇到运算符+,取出栈顶的两个元素进行计算,此时为b+c(设结果为d),再将d压入栈内,此时栈内的元素是a、d;遇到运算符*,取出a、d,计算a*d(设结果为e),再将e压入栈内。
扫描结束,此时站内的元素e为整个表达式的值。

下一个问题,如何把中缀表达式转化为后缀表达式呢?还是用栈。这个栈是运算符号栈,从栈底到栈顶,总是保持运算符号优先级严格递增
设最后储存后缀表达式的数组为A运算符号栈S。从左向右依次扫描中缀表达式。

1.若扫描到操作数,直接存入数组A。

2.若扫描到运算符,如果S为空,入栈;如果S非空,比较当前运算符与栈顶运算符的优先级,若高于,则入栈,若等于或低于,则S栈顶符号出栈,直到栈空或栈顶符号优先级低于当前符号,出栈的符号存入数组A,当前符号入栈。

3.若扫描到括号,入栈;直到扫描到另一半括号,此时,S的元素依次出栈存入数组A,直到遇到之前压入的括号,并丢弃之。

4.扫描完最后一个操作数,将S的元素依次出栈存入数组A。

扫描结束,此时数组A存储了相应的后缀表达式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值