Skip to content

Commit ce3e91a

Browse files
committed
Infix to Postfix conversion using Stack
1 parent 6c3b274 commit ce3e91a

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# Author: OMKAR PATHAK
2+
3+
import Stack
4+
5+
def isOperand(char):
6+
return (ord(char) >= ord('a') and ord(char) <= ord('z')) or (ord(char) >= ord('A') and ord(char) <= ord('Z'))
7+
8+
def precedence(char):
9+
if char == '+' or char == '-':
10+
return 1
11+
elif char == '*' or char == '/':
12+
return 2
13+
elif char == '^':
14+
return 3
15+
else:
16+
return -1
17+
18+
def infixToPostfix(myExp, myStack):
19+
postFix = []
20+
for i in range(len(myExp)):
21+
if (isOperand(myExp[i])):
22+
postFix.append(myExp[i])
23+
elif(myExp[i] == '('):
24+
myStack.push(myExp[i])
25+
elif(myExp[i] == ')'):
26+
topOperator = myStack.pop()
27+
while(not myStack.isEmpty() and topOperator != '('):
28+
postFix.append(topOperator)
29+
topOperator = myStack.pop()
30+
else:
31+
while (not myStack.isEmpty()) and (precedence(myExp[i]) <= precedence(myStack.peek())):
32+
postFix.append(myStack.pop())
33+
myStack.push(myExp[i])
34+
35+
while(not myStack.isEmpty()):
36+
postFix.append(myStack.pop())
37+
return ' '.join(postFix)
38+
39+
if __name__ == '__main__':
40+
myExp = 'a+b*(c^d-e)^(f+g*h)-i'
41+
myExp = [i for i in myExp]
42+
print('Infix:',' '.join(myExp))
43+
myStack = Stack.Stack(len(myExp))
44+
print('Postfix:',infixToPostfix(myExp, myStack))
45+
46+
# OUTPUT:
47+
# Infix: a + b * ( c ^ d - e ) ^ ( f + g * h ) - i
48+
# Postfix: a b c d ^ e - f g h * + ^ * + i -

0 commit comments

Comments
 (0)