Understanding Stacks and Queues in python

See following links for more information:

Stack
Queue

Visually these two data structures can be seen in a following way:

Stack:

Stack visual

Description:

There are variations of this data structure. However, in simple terms - as one can observe in the image provided, when you add to this data structure you place on top of what is already there and when you remove you also take from the top. You can view it as a stack of books which you go through one by one starting from the top and all the way down.

Queue

Queue visual

Description:

There are also variations on this particular data structure, however in simple terms - as you can see in the image provided, when you add to this data structure the new element goes in the begining and when you remove its the last element from the list which is being removed. You can imagine it as a queue you got in a shop where you stand behind a lot of people waiting for your turn to come to the counter to pay for your items.


To test this line by line, here are implementations of the classes (wrappers around deque) that are used in the task:

from collections import deque

class Queue(deque):
    enqueue = deque.append
    dequeue = deque.popleft
    def front(self):
        return self[-1]
    def size(self):
        return len(self)

class Stack(deque):
    push = deque.append
    def is_empty(self):
        return not self

In general, stacks are LIFO and queues are FIFO.

In Python, you can use the collections module to experiment with stacks and queues:

>>> from collections import deque
>>> stack = deque()
>>> stack.append(10)
>>> stack.append(20)
>>> stack.append(30)
>>> stack
deque([10, 20, 30])
>>> stack.pop()           # LIFO
30
>>> stack.pop()
20
>>> 
>>> queue = deque()
>>> queue.append(10)
>>> queue.append(20)
>>> queue.append(30)
>>> queue
deque([10, 20, 30])
>>> queue.popleft()       # FIFO
10
>>> queue.popleft()
20

STACK #LIFO

class stack(object):
 def __init__(self):
    self.items = []
 def isEmpty(self):
    return self.items==[]
 def push(self,item):
    self.items.append(item)
 def pop (self):
    return self.items.pop()
 def peek(self):
    return self.items[len(self.items) - 1]
 def size(self):
    return (len(self.items))
s = stack()
print (s.isEmpty())
>> True
s.push(1)
s.push('3')
s.peek()
>>'3'
s.size()
>> 2

Queue #FIFO

class Queue(object):
 def __init__(self):
    self.items = []
 def isEmpty(self):
    return self.items==[]
 def enqueue(self,item):
    self.items.insert(0,item)
 def dequeue(self):
     return self.items.pop()
 def size(self):
    return (len(self.items))
q = Queue()
q.isEmpty()
>>True
q.enqueue(1)
q.enqueue(2)
q.dequeue()
>>1