Skip to content

Commit 286646d

Browse files
committed
Added Stack Code with examples
1 parent 3e645c9 commit 286646d

File tree

3 files changed

+165
-0
lines changed

3 files changed

+165
-0
lines changed

1_Stack/1_Stack.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Stack:
2+
def __init__(self):
3+
self.top = -1
4+
self.stack = []
5+
6+
def push(self, data):
7+
self.stack.append(data)
8+
self.top += 1
9+
10+
def pop(self):
11+
if self.top > -1:
12+
data = self.stack[self.top]
13+
del self.stack[self.top]
14+
self.top -= 1
15+
return data
16+
else:
17+
print("Stack is empty.")
18+
19+
def peek(self):
20+
return self.stack[self.top]
21+
22+
def __str__(self):
23+
return str(self.stack)
24+
25+
26+
if __name__ == "__main__":
27+
stack = Stack()
28+
numbers = [5,15,25,35,45,55, 25, 65]
29+
30+
for num in numbers:
31+
stack.push(num)
32+
33+
print(f"Stack: {stack}")
34+
35+
print(f"Peek: {stack.peek()}")
36+
37+
for i in range(11):
38+
print(f"Pop: {stack.pop()}")

1_Stack/1b_Stack.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
'''
2+
PROBLEM:
3+
4+
Write a function in python that can reverse a string using stack data structure.
5+
Use [Stack class]
6+
```
7+
reverse_string("We will conquere COVID-19") should return "91-DIVOC ereuqnoc lliw eW"
8+
```
9+
'''
10+
11+
class Stack:
12+
def __init__(self):
13+
self.top = -1
14+
self.stack = []
15+
16+
def push(self, data):
17+
self.stack.append(data)
18+
self.top += 1
19+
20+
def pop(self):
21+
if self.top > -1:
22+
data = self.stack[self.top]
23+
del self.stack[self.top]
24+
self.top -= 1
25+
return data
26+
else:
27+
print("Stack is empty.")
28+
29+
30+
def reverse_string(self, txt):
31+
print("pushing data.")
32+
for i in txt:
33+
self.push(i)
34+
reverse_str = str()
35+
print("pop data")
36+
for i in range(self.top + 1):
37+
reverse_str += self.pop()
38+
39+
return reverse_str
40+
41+
42+
def __str__(self):
43+
return str(self.stack)
44+
45+
46+
if __name__ == "__main__":
47+
stack = Stack()
48+
reverse_str = stack.reverse_string("We will conquere COVID-19")
49+
print(reverse_str)
50+
expected_result = "91-DIVOC ereuqnoc lliw eW"
51+
print(reverse_str == expected_result)
52+
print(stack)
53+

1_Stack/1c_Stack.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
''' TODO : Write a function in python that checks if paranthesis in the string are balanced or not.
2+
Possible parantheses are "{}',"()" or "[]". Use Stack.
3+
```
4+
is_balanced("({a+b})") --> True
5+
is_balanced("))((a+b}{") --> False
6+
is_balanced("((a+b))") --> True
7+
is_balanced("))") --> False
8+
is_balanced("[a+b]*(x+2y)*{gg+kk}") --> True
9+
```
10+
'''
11+
class Stack:
12+
def __init__(self):
13+
self.top = -1
14+
self.stack = []
15+
16+
def push(self, data):
17+
self.stack.append(data)
18+
self.top += 1
19+
20+
def pop(self):
21+
if self.top > -1:
22+
data = self.stack[self.top]
23+
del self.stack[self.top]
24+
self.top -= 1
25+
return data
26+
else:
27+
print("Stack is empty.")
28+
29+
def match_paranthesis(self, ch1, ch2):
30+
paranthesis = {
31+
"}": "{",
32+
")":"(",
33+
"]":"["
34+
}
35+
return paranthesis[ch1] == ch2
36+
37+
def is_balanced(self, txt):
38+
print(txt, end=" >> ")
39+
for ch in txt:
40+
# print(ch, end=", ")
41+
42+
if ch in ["{" , "[" , "("]:
43+
# print(f"detected character: {ch}")
44+
self.push(ch)
45+
# print(f"pushed: {self.stack}")
46+
if ch in ["}" , "]" , ")"]:
47+
if self.top == -1:
48+
return False
49+
elif not self.match_paranthesis(ch, self.pop()):
50+
return False
51+
# print(f"self.top >> {self.top}")
52+
return self.top == -1
53+
54+
55+
def __str__(self):
56+
return str(self.stack)
57+
58+
59+
if __name__ == "__main__":
60+
stack = Stack()
61+
print(stack.is_balanced("({a+b})"))
62+
print(stack.is_balanced("))((a+b}{"))
63+
print(stack.is_balanced("((a+b))"))
64+
print(stack.is_balanced("((a+g))"))
65+
print(stack.is_balanced("))(("))
66+
print(stack.is_balanced("[a+b]*(x+2y)*{gg+kk}"))
67+
68+
'''
69+
LOGIC >> Only push the starting paranthesis
70+
Upon getting the ending paranthesis, pop the data and match.
71+
72+
LIFO >> Paranthesis, e.g., ``(, {, [`` Last In >> First out ``], }, )``
73+
74+
'''

0 commit comments

Comments
 (0)