A common programming interview question, and for a change, one that you will actually be able to use in the job, is that of implementing a Queue by means of using Stacks in Python.
The 5 common operations of a Queue
- Instantiation
- push(val)
- pop()
- peek()
- empty()
What each operation does
Instantiation
is the Queue’s storage object that will be used.
class MyQueue:
def __init__(self):
"""
Initialize your data structure here.
"""
self.stack = []
push(val)
is the way to add data to the Queue.
def push(self, x: int) -> None:
"""
Push element x to the back of queue.
"""
self.stack.append(x)
pop()
is the way to remove and return the front element in the Queue.
def pop(self) -> int:
"""
Removes the element from in front of queue and returns that element.
"""
if len(self.stack) > 0:
return self.stack.pop(0)
else:
return None
peek()
is the way to return the front element without removing it.
def peek(self) -> int:
"""
Get the front element.
"""
if len(self.stack):
return self.stack[0]
else:
return None
empty()
is the way to tell if a Queue is empty and contains any values.
def empty(self) -> bool:
"""
Returns whether the queue is empty.
"""
if len(self.stack) > 0:
return False
else:
return True
Putting it together
class MyQueue:
def __init__(self):
"""
Initialize the data structure
"""
self.stack = []
def push(self, x: int) -> None:
"""
Push element x to the back
"""
self.stack.append(x)
def pop(self) -> int:
"""
Removes the front element and returns it
"""
if len(self.stack) > 0:
return self.stack.pop(0)
else:
return None
def peek(self) -> int:
"""
Return the front element without removal
"""
if len(self.stack):
return self.stack[0]
else:
return None
def empty(self) -> bool:
"""
Determine if the queue is empty or not
"""
if len(self.stack) > 0:
return False
else:
return True
How to use our custom Queue
# We instantiate our Class object
obj = MyQueue()
# We add data to it
val = 123
obj.push(val)
# We pop the first element off the Queue and return it to a variable
element1 = obj.pop()
# We peek to get the first element without removal
element2 = obj.peek()
# We get a Boolean (True/False) if the Queue is empty or not
is_empty = obj.empty()