-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathdatastructs.py
113 lines (81 loc) · 2.09 KB
/
datastructs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
from chapter_2.linked_list_utils import Node
class Stack:
top: Node = None
size: int = 0
def push(self, elem):
self.size += 1
if not self.top:
self.top = Node(elem)
else:
new_node = Node(elem)
new_node.next = self.top
self.top = new_node
def pop(self):
if not self.top:
raise Exception("Cannot pop from an empty stack")
self.size -= 1
ret_elem = self.top.val
self.top = self.top.next
return ret_elem
def peek(self):
return self.top.val
def isEmpty(self):
return self.top is None
def __str__(self):
return self.top.__str__()
class Queue:
top: Node = None
bot: Node = None
size: int = 0
def push(self, elem):
self.size += 1
if not self.top:
self.top = Node(elem)
self.bot = self.top
else:
new_node = Node(elem)
self.top.next = new_node
self.top = new_node
def pop(self):
if not self.bot:
raise Exception("Cannot pop from an empty queue")
self.size -= 1
ret_elem = self.bot.val
self.bot = self.bot.next
if self.bot is None:
self.top = None
return ret_elem
def peek(self):
return self.bot.val
def isEmpty(self):
return self.bot is None
def __str__(self):
return self.bot.__str__()
def test_stack():
s1 = Stack()
for i in range(10):
s1.push(i)
print(s1)
for i in range(10):
print(s1.pop())
try:
s1.pop()
except Exception as e:
print(f"Oh no, got {e}")
def test_queue():
q1 = Queue()
for i in range(5):
q1.push(i)
print(f"Is empty ? {q1.isEmpty()} ---> {q1}")
for i in range(5):
print(q1.pop())
try:
q1.pop()
except Exception as e:
print(f"Oh no, got {e}, but queue has elem ? {q1.isEmpty()}")
for i in range(5):
q1.push(i)
print(q1.pop())
if __name__ == '__main__':
test_stack()
test_queue()