dreaming_everyday

双堆栈解中缀表达式

这是笔者的一个作业,这里做个简单记录如何去实现这个算法。

设计:

先找一个尽可能涵盖所有情况的中缀表达式,一步一步模拟计算过程,总结算法。

如下,笔者以6+2*((8+2*2)/4)为例(顺序:从左往右,从上往下):

双堆栈解中缀表达式 - 逐梦 - 随梦飞翔

 

双堆栈解中缀表达式 - 逐梦 - 随梦飞翔

 

从上面的过程基本上可以得出一个优先级表:

双堆栈解中缀表达式 - 逐梦 - 随梦飞翔

 

总结算法:

1、计算前往op栈放入“#”

2、逐个逐个字符地分析表达式(索引以用i表示)

3、数值:往数值栈入栈;操作符:栈外操作符比栈顶操作符优先级高则进栈,反之则出栈计算,计算结果进栈。

4、分析完表达式后(i达到最大),将栈内剩余操作符依次出栈运算,直到出栈的为“#”,此时数值栈内的数(仅有一个)即为结果


最后调试即可。

代码因为用的是c++,栈用的不是标准库,所以就不放上来了。

评论

热度(1)