怎么不用堆栈将正常算式转化为逆波兰表达式
如何不用堆栈将正常算式转化为逆波兰表达式?
各位大虾们,小弟刚刚接触c++,要编一个简单的计算器程序,但是不知道怎么能不用堆栈将正常算式转化为逆波兰表达式,希望各位大虾帮帮忙!!
PS:不求代码,只求思路。。。
------解决方案--------------------
不用栈的表达式计算的C++程序,我资源中有一个,供参考:
http://download.****.net/detail/keiy/2325075
------解决方案--------------------
递归,建立表达式树。
------解决方案--------------------
1.分别读出数字和运算符号。
建立两个栈先。
STACK1
STACK2
关键说下入栈的过程:
1.数字入栈1。
2.符号入栈 分几种情况,
a。)直接入栈2情况:
如果栈2是空直接入栈、如果遇到左括号
直接入栈、如果优先级大于栈2定部符号优先级直接入栈(一定要大于)。
b.)不能直接入或不能入符号栈的情况:
将要入栈的为右括号,则弹出栈2的元素到栈1,直到栈2的顶部为左括号为止,弹出左括号(左右括号丢弃)
将要入栈的为运算符号,且优先级低于或等于栈2顶部符号,则弹出栈2顶部元素到栈1,直到栈2顶部符号优先级低于待入符号,然后把待入符号压入栈2
c.如果两个栈通过以上方式已经操作完毕输入的串,则吧栈2的内容依次弹出到栈1,直到栈2空为止
d.从栈底->栈顶的序列即为逆波兰表达式。
e.吧逆波兰入依次入栈2,如果是数字则压栈,如果是运算符号,则弹出对应数量(单目运算弹出1个,双目两个,以此类推)的数字,调用对应符号的运算方法,算出的表达式结果再压栈,顺序读入逆波兰式重复e的操作,最后栈定的结果即为运算结果。
各位大虾们,小弟刚刚接触c++,要编一个简单的计算器程序,但是不知道怎么能不用堆栈将正常算式转化为逆波兰表达式,希望各位大虾帮帮忙!!
PS:不求代码,只求思路。。。
------解决方案--------------------
不用栈的表达式计算的C++程序,我资源中有一个,供参考:
http://download.****.net/detail/keiy/2325075
------解决方案--------------------
递归,建立表达式树。
------解决方案--------------------
1.分别读出数字和运算符号。
建立两个栈先。
STACK1
STACK2
关键说下入栈的过程:
1.数字入栈1。
2.符号入栈 分几种情况,
a。)直接入栈2情况:
如果栈2是空直接入栈、如果遇到左括号
直接入栈、如果优先级大于栈2定部符号优先级直接入栈(一定要大于)。
b.)不能直接入或不能入符号栈的情况:
将要入栈的为右括号,则弹出栈2的元素到栈1,直到栈2的顶部为左括号为止,弹出左括号(左右括号丢弃)
将要入栈的为运算符号,且优先级低于或等于栈2顶部符号,则弹出栈2顶部元素到栈1,直到栈2顶部符号优先级低于待入符号,然后把待入符号压入栈2
c.如果两个栈通过以上方式已经操作完毕输入的串,则吧栈2的内容依次弹出到栈1,直到栈2空为止
d.从栈底->栈顶的序列即为逆波兰表达式。
e.吧逆波兰入依次入栈2,如果是数字则压栈,如果是运算符号,则弹出对应数量(单目运算弹出1个,双目两个,以此类推)的数字,调用对应符号的运算方法,算出的表达式结果再压栈,顺序读入逆波兰式重复e的操作,最后栈定的结果即为运算结果。