数据结构实验之栈与队列二:一般算术表达式转换成后缀式(简要分析+代码)

本文介绍如何将基于二元运算符的一般算术表达式转换成后缀式。通过分析运算符优先级规则,如括号、%、/、*、-、+的优先级,以及利用栈来处理未确定输出的运算符,实现表达式的转换。示例输入ab+(c-d/e)f#,输出abcde/-f+。

数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

Input
输入一个算术表达式,以‘#’字符作为结束标志。

Output
输出该表达式转换所得到的后缀式。

Sample
Input
ab+(c-d/e)f#
Output
ab
cde/-f
+

1.关于字母的输出:不管是一般(前缀)式还是后缀式,关于字符的输入输出顺序都是一样的,当遇见字母时我们可以直接输出
2.关于运算字符的输出:先进行运算的字符要先输出,当一个运算符遇见比它优先级小的运算符时,就可以确定输出了。这里,我们用一个专门的数组来存还不能判断输出的运算符,也就是还没有遇见优先级比它还小的运算符。
运算符的优先级规则:
(1)括号优先
(2)%,/,*运算优先级相同,-,+运算优先级相同,且前者优先级更高。
(3)同优先级的运算,先存入先运算
我们始终要保证数组里存的运算符的优先级是依次升高的。
再根据代码来理解一下吧

#include <bits/stdc++.h>
using namespace std;
int f(char a, char b)                        //判断字符a,b的优先级,如果a比b的优先级低,返回 1,否则返回0
{
   
   
    if (b == '(') return 1;                  //左括号优先级最高,
    if ((a == '/' || a == '*' || a == '%') && (b == '+' || b 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值