Skip to content

Queue

# With and without using inbuilt methods.


class Queue:
    def __init__(self):
        self.queue = []

    def is_empty(self):
        return len(self.queue) == 0

    def enqueue(self, data):
        self.queue.append(data)

    def dequeue(self):
        if self.is_empty():
            raise Exception("Queue is empty")
        return self.queue.pop(0)

    def peek(self):
        if self.is_empty():
            raise Exception("Queue is empty")
        return self.queue[0]

    def size(self):
        return len(self.queue)


class QueueScratch:
    def __init__(self):
        self.queue = []
        self.front = 0
        self.rear = -1

    def is_empty(self):
        return self.rear < self.front

    def enqueue(self, data):
        self.rear += 1
        self.queue.insert(self.rear, data)  # where and what

    def dequeue(self):
        if self.is_empty():
            raise Exception("Queue is empty")
        data = self.queue[self.front]
        self.front += 1
        return data

    def peek(self):
        if self.is_empty():
            raise Exception("Queue is empty")
        return self.queue[self.front]

    def size(self):
        return self.rear - self.front + 1


q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
print(q.dequeue())  # Output: 1
print(q.peek())  # Output: 2
print(q.is_empty())  # Output: False
print(q.size())  # Output: 2