From ce3e91a420333a08b054b57675f699605d1b2452 Mon Sep 17 00:00:00 2001 From: Omkar Pathak Date: Sun, 16 Jul 2017 11:25:50 +0530 Subject: [PATCH] Infix to Postfix conversion using Stack --- .../Stacks/Infix_To_Postfix_Conversion.py | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 data_structures/Stacks/Infix_To_Postfix_Conversion.py diff --git a/data_structures/Stacks/Infix_To_Postfix_Conversion.py b/data_structures/Stacks/Infix_To_Postfix_Conversion.py new file mode 100644 index 000000000..e33926a3d --- /dev/null +++ b/data_structures/Stacks/Infix_To_Postfix_Conversion.py @@ -0,0 +1,48 @@ +# Author: OMKAR PATHAK + +import Stack + +def isOperand(char): + return (ord(char) >= ord('a') and ord(char) <= ord('z')) or (ord(char) >= ord('A') and ord(char) <= ord('Z')) + +def precedence(char): + if char == '+' or char == '-': + return 1 + elif char == '*' or char == '/': + return 2 + elif char == '^': + return 3 + else: + return -1 + +def infixToPostfix(myExp, myStack): + postFix = [] + for i in range(len(myExp)): + if (isOperand(myExp[i])): + postFix.append(myExp[i]) + elif(myExp[i] == '('): + myStack.push(myExp[i]) + elif(myExp[i] == ')'): + topOperator = myStack.pop() + while(not myStack.isEmpty() and topOperator != '('): + postFix.append(topOperator) + topOperator = myStack.pop() + else: + while (not myStack.isEmpty()) and (precedence(myExp[i]) <= precedence(myStack.peek())): + postFix.append(myStack.pop()) + myStack.push(myExp[i]) + + while(not myStack.isEmpty()): + postFix.append(myStack.pop()) + return ' '.join(postFix) + +if __name__ == '__main__': + myExp = 'a+b*(c^d-e)^(f+g*h)-i' + myExp = [i for i in myExp] + print('Infix:',' '.join(myExp)) + myStack = Stack.Stack(len(myExp)) + print('Postfix:',infixToPostfix(myExp, myStack)) + + # OUTPUT: + # Infix: a + b * ( c ^ d - e ) ^ ( f + g * h ) - i + # Postfix: a b c d ^ e - f g h * + ^ * + i -