中序转后序代码详解以及实现(C++)

前两天收到了一个作业题,讲的是把中序表达式表示成逆向波兰表达式,但是没理解,按照网上的方法做了下,搞了半天,发现总差一点,检查了一下代码,发现是在比较操作符优先级时出错了

下面对它的完整考虑方法

读入的括号必须是英文状态下的!

其算法的完整思路应该是:

  1. 当轮到的a[i]的是数子时,直接输出出来;
  2. 当读取的是运算符时,不直接输出,先入栈存储(存储是针对栈中无其他运算符),然后进行优先级的比较:

         1)如果该运算符的优先级比栈顶元素(即运算符或者左括号,这个之后再说)的要高,那么就入栈;

         2)如果该运算符的优先级没有栈顶的高,那么栈顶的操作符就输出来并出栈,再接着拿当前栈顶操作符的优先级与待入栈的元素a[i]进行比较,以此类推;直到,,,,(第三步)

      3.如果读取到的运算符为“(”,那么就直接入栈存储;

      4.如果读取到的运算符为“)”,那么直接输出栈中元素,并从栈中弹出运算符,直到遇到“(”,“(”和“)”不用输出;

      5.当字符串全部读取过一遍后,将栈中的运算符按序全部输出再弹出(除了“(”),直到!s.empty()的值为假

在写主要代码之前,我们先看一下定义运算符优先级的代码:

int priority(char ch)
{
	if (ch == '*' || ch == '/')
		return 1;
	if (ch == '+' || ch == '-')
		return 0;
	if (ch == '(')
		re
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值