Skip to content

Commit 4c6d255

Browse files
committed
it convert infix notation to postfix
1 parent 978fe13 commit 4c6d255

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

infix_to_postfix.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
class Stack:
2+
precedence = {'^': 5, '*': 4, '/': 4, '-': 3, '+': 3, '(': 2, ')': 1}
3+
4+
def __init__(self):
5+
self.items = []
6+
self.size = -1
7+
8+
def push(self, value):
9+
self.items.append(value)
10+
self.size += 1
11+
12+
def isEmpty(self):
13+
return self.items == []
14+
15+
def pop(self):
16+
if self.isEmpty():
17+
return 0
18+
else:
19+
self.size -= 1
20+
return self.items.pop()
21+
22+
def seek(self):
23+
if self.isEmpty():
24+
return False
25+
else:
26+
return self.items[self.size]
27+
28+
def isOperand(self, i):
29+
if i in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
30+
return True
31+
else:
32+
return False
33+
34+
def infix_to_postfix(self, expr):
35+
postfix = ""
36+
37+
for i in expr:
38+
if len(expr) % 2 == 0:
39+
print("Invalid Expression")
40+
return False
41+
42+
elif self.isOperand(i):
43+
postfix += i
44+
45+
elif i in '^*+-/':
46+
while len(self.items) and self.precedence[i] <= self.precedence[self.seek()]:
47+
postfix += self.pop()
48+
49+
self.push(i)
50+
51+
elif i in '(':
52+
self.push(i)
53+
54+
elif i in ')':
55+
temp = self.pop()
56+
while temp != '(':
57+
postfix += temp
58+
temp = self.pop()
59+
print(postfix)
60+
while len(self.items):
61+
if self.seek() == '(':
62+
self.pop()
63+
64+
else:
65+
postfix += self.pop()
66+
return postfix
67+
68+
69+
s = Stack()
70+
expr = "(A+B)*C"
71+
result = s.infix_to_postfix(expr)
72+
if result != False:
73+
print("the postfix of :", expr, "is", result)
74+
75+

0 commit comments

Comments
 (0)