JS实现逆波兰表达式

本文介绍了如何使用JS处理波兰表达式和逆波兰表达式,包括中缀转前缀、前缀计算、中缀转后缀及后缀计算的过程。通过扫描表达式和操作符栈来完成转换和计算。
摘要由CSDN通过智能技术生成

常见的算术表达式,称为中缀表达式,例如:

5 + ( 6 – 4 / 2 ) * 3

波兰表达式也称为前缀表达式,以上面的例子为例,其波兰表达式为:

+ 5 * - 6 / 4 2 3

波兰表达式

中缀表达式转换前缀表达式的操作过程为:

(1)首先设定一个操作符栈,从右到左顺序扫描整个中缀表达式:

  • 如果是操作数,则直接归入前缀表达式;
  • 如果是括号:如果是右括号,则直接将其入栈;如果是左括号,则将栈中的操作符依次弹栈,归入前缀表达式,直至遇到右括号,将右括号弹栈,处理结束;
  • 如果是其他操作符,则检测栈顶操作符的优先级与当前操作符的优先级关系,如果栈顶操作符优先级大于当前操作符的优先级,则弹栈,并归入前缀表达式,直至栈顶操作符优先级小于等于当前操作符优先级,这时将当前操作符压栈。

(2)当扫描完毕整个中缀表达式后,检测操作符栈是否为空,如果不为空,则依次将栈中操作符弹栈,归入前缀表达式。

(3)最后,将前缀表达式翻转,得到中缀表达式对应的前缀表达式。
在这里插入图片描述

波兰表达式计算

  1. 对前缀表达式从后向前扫描,设定一个操作数栈,如果是操作数,则将其直接入栈。
  2. 如果是操作符,则从栈中弹出操作符对应的操作数进行运算,并将计算结果压栈。
  3. 直至从右到左扫描完毕整个前缀表达式,这时操作数栈中应该只有一个元素,该元素的值则为前缀表达式的计算结果。

逆波兰表达式

逆波兰表达式也称为后缀表达式,以上面的例子为例,其逆波兰表达式为:

5 6 4 2 / - 3 * +

中缀表达式转换后缀表达式的操作过程为:

(1)自右向左顺序扫描整个中缀表达式;

  • 如果当前元素为操作数,则将该元素直接存入到后缀表达式中;
  • 如果当前元素为“(”,则将其直接入栈;如果为“)”,则将栈中的操作符弹栈,并将弹栈的操作符存入到后缀表达式中,直至遇到“(”,将“(”从栈中弹出,并不将其存入到后缀表达式中;
  • 如果是其他操作符,如果其优先级高于栈顶操作符的优先级,则将其入栈,如果是小于或低于栈顶操作符优先级,则依次弹出栈顶操作符并存入后缀表达式中,直至遇到一个栈顶优先级小于当前元素优先级时或者栈顶元素为“(”为止,保持当前栈顶元素不变,并将当前元素入栈;

(2)当扫描完毕整个中缀表达式后,检测操作符栈是否为空,如果不为空,则依次将栈中操作符弹栈,归入后缀表达式。
在这里插入图片描述
在这里插入图片描述

var symbol=['#','(','+','-','*','/',')'];
var symbolPriority={
   
  '#': 0,
  '(': 1,
  '+': 2,
  '-': 2,
  '*': 3,
  '/': 3,
  ')': 4
}

function operaSymbol(char,sym,res){
   
  let lastChar=sym[sym
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值