I want to know if there is a way to solve infix expressions in a single pass using 2 stacks? The stacks can be one for operator and the other for operands...
The standard way to solve by shunt-yard algorithm is to convert the infix expression to postfix(reverse polish) and then solve. I don't want to convert the expression first to postfix.
If the expression is like 2*3-(6+5)+8
, how to solve?
Quite late, but here is the answer.
Take two stacks:
operator stack
{ for operators and parentheses }.operand stack
.If character exists to be read:
operand
push on the operand stack
, if character is (
, push on the operator stack
.operator
operator stack
is not of smaller precedence than this character.operator
from operator stack
.operands
(op1
and op2
) from operand stack
.op1 op op2
on the operand stack
back to 2.1.)
, do the same as 2.2 - 2.4 till you encounter (
.Else (no more character left to read):
operator stack
is not empty.operands
and push op1 op op2
on the operand stack
.return the top value from operand stack
.