在中描述的方法并不能解决“(1+((2*3+4)*(4*5))”该问题,现将2个堆栈变成1个堆栈,方法如下:
1、将表达式从左到右开始逐个将左括号、数值和操作符压入栈中;
2、遇到右括号时,将栈中元素逐个弹出,直到弹出左扩号为止;
3、将弹出的元素存放置一个临时的线性集合中(数组、链表或者堆栈中),如果是数组和链表从后向前依次遍历出子表达式,并按照加减乘除的优先级计算表达式的值,然后再将值压入栈中;
4、重复1~3的步骤,最后计算的值为表达式的最终结果。
使用该方法可以解决类似于a and b not c这样的逻辑运算问题,后面的重点还是讨论如何将该方法用于正则表达式转换成非确定性有限自动机NFA!