class Stack: def __init__(self, num): self.num = num self.ll = LinkedList() self.rooms = 0 self.stack_val = [] def push(self, val): if self.num != self.rooms: self.ll.add_val(val) self.rooms += 1 print(f"Adding {val} to the stacks") self.stack_val.append(val) return self.stack_val elif self.num == self.rooms: print("No Space to add") def peek(self): try: return f"First element {self.ll.show_ll()[:2]}" except Exception: return "Nothing on stack" def pop(self): if self.rooms > 0: self.rooms -= 1 print(f"Removing {self.stack_val[-1]} from the stack") self.stack_val.pop() else: print("Stack is empty") # st = Stack(5) # #push elements to stack # st.push(10) # st.push(20) # st.push(30) # st.push(40) # st.push(50) # st.push(60) # #peek # print("__"*10) # print(st.peek()) # #pop # print("__"*10) # st.pop() # st.pop() # st.pop() # st.pop() # st.pop() # st.pop()
class Queue: def __init__(self, num): self.num = num self.ll = LinkedList() self.rooms = 0 self.queue_val = [] def add_to_queue(self, val): if self.num != self.rooms: self.ll.add_val(val) self.rooms += 1 print(f"Adding {val} to the queue") self.queue_val.append(val) return self.queue_val elif self.num == self.rooms: print("Queue is full") def view_queue(self): try: return f"First element in (FIFO) -> {self.queue_val[0]}" except Exception: return "Nothing in queue" def dequeue(self): if self.rooms > 0: self.rooms -= 1 print(f"Removing { self.queue_val[0]} from the queue") self.queue_val.pop(0) else: print("Queue is empty") # q = Queue(3) # #add to queue # q.add_to_queue(10) # q.add_to_queue(20) # q.add_to_queue(30) # q.add_to_queue(40) # #view queue # print("__"*10) # print(q.view_queue()) # # remove from queue # print("__"*10) # q.dequeue() # q.dequeue() # q.dequeue() # q.dequeue()