Given an arithmetic expression in in-fix notation. Write code to convert that algorithm in corresponding post-fix notation. For example:
Infix Postfix ------ -------- a+b ab+ (a+b)*c ab+c* a+b*c abc*+ a*(b+c)-d/e abc+*de/-
To solve this expression, we need a Stack. Let the Infix expression be in a String, and postfix expression will go in another string.
Initially the Stack will be empty and postfix expression will also be empty.
- Read the tokens(characters) from the infix string one at a time from left to right
- If token is an operand, add it to the Postfix string.
- If token is a Left parentheses, Push it on to the Stack
- If the token is a Right parentheses
- Repeatedly Pop the stack and add the poped out token in to postfix string until a left parenthesis is encountered.
- Remove left parenthesis from the stack and ignore it
- If token is an operator
- If the stack is empty push the operator in to the stack
- If the stack is not empty compare the precedence of the operator with the element on top of the stack
- If the operator in the stack has higher precedence than the token Pop the stack and add the poped out element in to the string S. else Push the operator in to the stack
- Repeat this step until the stack is not empty or the operator in the stack has higher precedence than the token
- Repeat this step till all the characters are read.
- After all the characters are read and the stack is not empty then Pop the stack and add the tokens to the string S
- Return the Postfix string S
Lets follow an example visually:
Infix Expression: A * (B + C) – D / E
Try writing it yourself. If you get into problems, I will write a separate post for the code.