-
Notifications
You must be signed in to change notification settings - Fork 8
/
stackLL.py
150 lines (121 loc) · 3.35 KB
/
stackLL.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
import os
class _Node:
'''
Creates a Node with two fields:
1. element (accesed using ._element)
2. link (accesed using ._link)
'''
__slots__ = '_element', '_link'
def __init__(self, element, link):
'''
Initialses _element and _link with element and link respectively.
'''
self._element = element
self._link = link
class StackLL:
'''
Consists of member funtions to perform different
operations on the linked list.
'''
def __init__(self):
'''
Initialses head, tail and size with None, None and 0 respectively.
'''
self._head = None
self._tail = None
self._size = 0
def __len__(self):
'''
Returns length of stack.
'''
return self._size
def isempty(self):
'''
Returns True if stack is empty, otherwise False.
'''
return self._size == 0
def push(self, e):
'''
Pushes the passed element at the beginning of the linked list.
That means, on the top of our stack.
'''
newest = _Node(e, None)
if self.isempty():
self._head = newest
self._tail = newest
else:
newest._link = self._head
self._head = newest
self._size += 1
def pop(self):
'''
Removes element from the beginning of the linked list.
That means, pops element that is on the top.
Returns the removed element.
'''
if self.isempty():
print("Stack is Empty. Cannot perform Pop operation.")
return
e = self._head._element
self._head = self._head._link
self._size = self._size - 1
if self.isempty():
self._tail = None
return e
def top(self):
'''
Peeks at the element on the top of the stack.
'''
if self.isempty():
print("Stack is Empty. Cannot perform Pop operation.")
return
e = self._head._element
return e
def display(self):
'''
Utility function to display the Stack.
'''
if self.isempty() == 0:
p = self._head
while p:
print(p._element)
p = p._link
else:
print("Empty")
###############################################################################
def options():
'''
Prints Menu for operations
'''
options_list = ['Push', 'Pop', 'Top',
'Display Stack', 'Exit']
print("MENU")
for i, option in enumerate(options_list):
print(f'{i + 1}. {option}')
choice = int(input("Enter choice: "))
return choice
def switch_case(choice):
'''
Switch Case for operations
'''
os.system('cls')
if choice == 1:
elem = int(input("Enter Item: "))
S.push(elem)
elif choice == 2:
print('Popped item is: ', S.pop())
elif choice == 3:
print("Item on top is: ", S.top())
elif choice == 4:
print("Stack:")
S.display()
print("\n")
elif choice == 5:
import sys
sys.exit()
###############################################################################
if __name__ == '__main__':
S = StackLL()
while True:
choice = options()
switch_case(choice)