Skip to content

Commit 2732702

Browse files
find the stack min
1 parent b36ac50 commit 2732702

File tree

1 file changed

+85
-0
lines changed
  • Python/chapter03/3.2 - Stack Min

1 file changed

+85
-0
lines changed
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
#!/usr/bin/python3
2+
3+
import unittest
4+
5+
6+
class Stack:
7+
def __init__(self):
8+
self.stack = []
9+
self.min = None
10+
11+
def getMin(self):
12+
return self.min
13+
14+
def pop(self):
15+
if not self.length:
16+
print('No stack to pop')
17+
return
18+
19+
item = self.stack.pop()
20+
print('Item popped', item)
21+
22+
if item == self.min:
23+
if self.length() > 0:
24+
self.findMin()
25+
else:
26+
self.min = None
27+
return item
28+
29+
def findMin(self):
30+
self.min = self.stack[0]
31+
for x in self.stack:
32+
if x < self.min:
33+
self.min = x
34+
35+
def length(self):
36+
return len(self.stack)
37+
38+
def push(self, value):
39+
if not self.min:
40+
self.min = value
41+
elif value < self.min:
42+
self.min = value
43+
44+
self.stack.append(value)
45+
print('Item added to stack', value)
46+
47+
def peek(self):
48+
if not self.length:
49+
print('No stack to peek')
50+
return
51+
print('Peeking into stack', self.stack[-1])
52+
53+
def printStack(self):
54+
if not self.length:
55+
print('No stack to peeek')
56+
return
57+
58+
print("Top of stack\n _ ")
59+
for x in self.stack[::-1]:
60+
print('|', x, '|')
61+
print('|', '_', '|')
62+
63+
64+
class Test(unittest.TestCase):
65+
@classmethod
66+
def setUpClass(cls):
67+
pass
68+
69+
@classmethod
70+
def tearDownClass(cls):
71+
pass
72+
73+
def test1(self):
74+
arr = [2, 5, 7, 10, 3, 10, -1]
75+
s = Stack()
76+
for x in arr:
77+
s.push(x)
78+
s.printStack()
79+
print('Min value in stack -->', s.getMin())
80+
s.pop()
81+
print('Min value after pop -->', s.getMin())
82+
83+
84+
if __name__ == '__main__':
85+
unittest.main()

0 commit comments

Comments
 (0)