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.
Algorithm:
Lets follow an example visually:
Infix Expression: A * (B + C) – D / E
Code:
For simplicity of implementation, I assume that expression has only three things:
In this code we use the implementation of Stack from this post. Please read it before proceeding further.
Then we are using two helper function, one to check if the given character is operand or not and second to return the precedence of a given operator.
/* * operand can be a single alphabete only. */ bool isOperand(char ch) { return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'); } /* * return the precedence of an operator. Numbers are just to use precedence for relative purpose. */ int operatorPrecedence(char ch) { switch (ch) { case '+': case '-': return 1; case '*': case '/': return 2; case '^': return 3; } return -1; }
Below is the function that does the actual operation. It just print the postfix expression and
/* * This function uses Stack data structure. Returns -1 if the expression is invalid */ int infixToPostfix(char* expression) { int i, k; MyStack stack; // read each character of the expression (which is either operator, operand or parenthesis for (i = 0, k = -1; expression[i]; ++i) { if (isOperand(expression[i])) { expression[++k] = expression[i]; } else if (expression[i] == '(') { stack.push(expression[i]); } else if (expression[i] == ')') { while (!stack.isEmpty() && stack.getTop() != '(') expression[++k] = stack.pop(); if (!stack.isEmpty() && stack.getTop() != '(') return FAILOUR; else stack.pop(); } else // an operator is encountered { while (!stack.isEmpty() && operatorPrecedence(expression[i]) <= operatorPrecedence(stack.getTop())) expression[++k] = stack.pop(); stack.push(expression[i]); } } // All remaining elements in the stack are operators. // pop them all out while (!stack.isEmpty()) expression[++k] = stack.pop(); expression[++k] = '\0'; cout<<expression ; return SUCCESS; }
8 Comments
Please write the program for this.Reply as soon as possible
Can you write the code?
added the code.
thank you for share!
Added the code.
can u please give me the answer of this qustion
Write a program that gets an Infix arithmetic expression and converts it into postfix notation using Stack
• The program should then evaluate the postfix expression and output the result
• Your program should define the input and output format, enforce the format and handle Exceptions (exceptional conditions).
• Use appropriate comments at every stage of programming
You need a combination of this post and a later post (which has code to evaluate a post fix expression) http://www.ritambhara.in/code-to-evaluate-a-postfix-expression/.
Formats of Input and outputs are defined in the post itself.
i need this question answer
convert the following expression written in infix notation to post fix notation.
Show all the steps performed?
Q9) a: 5 * (6+2) – 12 / 4
Q9) b: (A+B ^D) / (E-F) + G