## Introduction

**‘Queue’** is another abstract and linear data structure. It’s almost like **Stack**. The difference is it follows the principle FIFO instead of LIFO. So let’s get into the blog. In this blog, I am going to give you an overview of the Queue data structure. And of course, I will show you the implementation in Python.

## Concept

The queue works just like the real-life queue. The rule it follows is First In First Out and also known as **FIFO**.

In this way, we can store data in a computer where the first inserted data will be removed first. Let’s see a visual example.

## Code Implementation

In the queue data structure, there are two main operations. These two operations have a naming convention. One is for adding data. It’s called **enqueue**. Another is for removing data. And it’s called **dequeue**. There is also another operation called **peek**. This operation returns the first inserted data of the queue, which is not removed yet.

We can implement Queue using **Array** or **Linked List** data structure. This time we will see how to implement it using Linked List.

class Node(): def __init__(self, val): self.val = val self.next = None class Queue(): def __init__(self): self.head = None self.tail = None # Enqueue def enqueue(self, val): new_node = Node(val) if self.head is None: self.head = new_node else: self.tail.next = new_node self.tail = new_node # Dequeue def dequeue(self): if self.head == None: return 'Stack is empty' self.head = self.head.next # Search def search(self, val): if self.head is None: return False current = self.head while current: if current.val == val: return True current = current.next return False # Peek def peek(self): if self.head == None: return 'Stack is empty' return self.head.val queue = Queue() queue.enqueue(1) queue.enqueue(2) queue.enqueue(3) queue.enqueue(4) queue.enqueue(5) print(queue.peek()) # 1 print(queue.search(3)) # True print(queue.search(10)) # False queue.dequeue() queue.dequeue() print(queue.peek()) # 3

The time complexity of these four operations are:

**Enqueue:** O(1)**Dequeue:** O(1)**Search:** O(n)**Peek:** O(1)

## Priority Queue

There is an exception in the queue, which is called the priority queue. It does not follow the general queue rule FIFO. Here elements are removed based on the priority. Usually, priorities are set while when the elements are inserted.

## Last Words

I hope this high-level overview and implementation of the Queue data structure helps you. There is so many real-life use case of this data structure in computer science. If you know this better, you can implement it in your real-life project.