javascript栈的应用之表达式求值

下面来谈一个比较经典的表达式求值问题,这个问题主要是设计到操作符的优先级。我们通常看到的表达式都是中缀表达式,存在很多优先级差别,而后缀表达式则没有这些优先级问题。下面先看看两种表达式的区别。

         中缀表达式:a*b+c*d-e/f

         后缀表达式:ab*cd*+ef/-

         从中缀表达式转换到后缀表示式是很难实现的,我们这里可以通过栈的思想来实现。下面进行详细的介绍是什么样的思想:

在对一个中缀表示式进行转换的时候,遇到非操作符的字符则直接保存到后缀表示式的存储空间中。

遇到(,则压入栈,只有遇到对应的)才能被弹出。

遇到),就将(之前的操作符全部弹出,并保存到存储空间。

遇到*和/这样优先级高的,就判断栈中的操作符优先级是否低于当前操作符。

如果栈中的遇到的低,则将遇到的继续入栈;如果栈中的高,则将栈中的出栈,遇到的入栈

最后,当字符串遍历完成,依次弹出操作符,保存到存储空间。

         为了方便理解,将上面的例子再次讲解。a*b+c*d-e/f

         首先是ab被保存到了存储空间,然后*入栈。现在栈中只有*。

         遇到+之后,由于*比+优先级高,所以*出栈,+入栈,这样存储空间变为ab*,栈中变为+。

         再时候遇到c,存储空间变为ab*c,栈中还是+。

         接下来遇到*和d,由于+比*低,所以*继续入栈,栈中表为了+*,存储空间为ab*cd。

         之后遇到-,由于*比-高,所以+*出栈,-入栈,存储空间变为ab*cd*+

……后面不用解释了,悟性再低也应该会了。

下面我们用javascript代码来实现下吧。



	
		
   
   
		
	
	
<script type="text/javascript">
	function midTOLast(a){
		var a_len=a.length;
		var myArray=new Array();
		b='';
		for(var i=0;i
   
   


   
   
当然,以上程序还存在一点bug,但是思想应该就是这样子的。
下一节,我们将讲解如何通过后缀表达式计算出表达式的结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值