Back to Data Structures & Algorithms
2026-01-195 min read

Dequeue Operation (Data Structures & Algorithms)

Learn Dequeue Operation (Data Structures & Algorithms) step by step with clear examples and exercises.

Why This Matters

Understanding dequeue operation is crucial for mastering data structures and algorithms, especially when dealing with queue and double-ended queue (deque) data structures. It plays a significant role in various real-world scenarios such as operating systems, web servers, network protocols, and more. In interviews, you may encounter questions related to dequeue operations, and understanding its intricacies can help you solve complex problems efficiently.

In this lesson, we'll delve deeper into the dequeue operation, exploring its implementation, usage, and common mistakes when working with Python. By the end of this tutorial, you'll have a solid grasp of dequeues and be able to apply your knowledge in real-world scenarios.

Prerequisites

To fully grasp the concept of dequeue operation, you should have a good understanding of:

  1. Basic Python syntax and control structures (if-else, for loops, while loops)
  2. Data Structures like lists, tuples, and dictionaries
  3. Understanding the difference between mutable and immutable data types
  4. Basic concepts of algorithms and big O notation
  5. Familiarity with Python's built-in collections module
  6. Understanding the concept of queues and stacks
  7. Knowledge of common data structures like arrays and linked lists
  8. Comfort working with Python classes and methods

Core Concept

A dequeue (double-ended queue) is a linear data structure that allows adding and removing elements from both ends. It can be implemented using lists, arrays, or linked lists in Python. The primary operations on a deque are add_front(), add_rear(), remove_front(), and remove_rear().

In Python, we don't have built-in support for deques, but the collections module provides a deque data type that supports efficient addition and removal of elements from both ends.

from collections import deque

Initializing a Deque

To create an empty deque in Python, use the deque() constructor:

my_deque = deque()

You can also initialize a deque with a list or iterable:

my_list = [1, 2, 3, 4]
my_deque = deque(my_list)

Adding Elements to the Front (add_front())

To add an element at the front of a deque in Python, use the appendleft() method:

my_deque.appendleft(5)
print(my_deque) # Output: deque([5, 1, 2, 3, 4])

Adding Elements to the Rear (add_rear())

To add an element at the rear of a deque in Python, use the append() method:

my_deque.append(6)
print(my_deque) # Output: deque([5, 1, 2, 3, 4, 6])

Removing Elements from the Front (remove_front())

To remove an element from the front of a deque in Python, use the popleft() method:

my_deque.popleft()
print(my_deque) # Output: deque([1, 2, 3, 4, 6])

Removing Elements from the Rear (remove_rear())

To remove an element from the rear of a deque in Python, use the pop() method without any arguments:

my_deque.pop()
print(my_deque) # Output: deque([1, 2, 3, 4])

Other Useful Methods

  • len(deque) to get the length of a deque
  • deque.clear() to clear all elements from a deque
  • deque.copy() to create a copy of a deque
  • deque.extendleft(iterable) to add multiple elements at the front of a deque
  • deque.extended() to get the number of elements added during an extend operation
  • deque.extendright(iterable) to add multiple elements at the rear of a deque

Worked Example

Let's implement a simple example of using a deque to simulate a queue with the enqueue (add element) and dequeue (remove element) operations. We will also create methods for checking if the queue is empty and getting its size.

from collections import deque

class Queue:
def __init__(self):
self.deque = deque()

def enqueue(self, item):
self.deque.append(item)

def dequeue(self):
if len(self.deque) == 0:
return "Queue is empty"
else:
return self.deque.popleft()

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

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

my_queue = Queue()
my_queue.enqueue(1)
my_queue.enqueue(2)
my_queue.enqueue(3)
print("Dequeued:", my_queue.dequeue()) # Output: Dequeued: 1
print("Queue size:", my_queue.size()) # Output: Queue size: 2

Common Mistakes

  • Forgetting to import the collections module before using the deque data type.
  • Using the append() method instead of appendleft() for adding elements at the front of a deque.
  • Using the pop() method with an argument when trying to remove elements from the rear of a deque.
  • Assuming that a deque is thread-safe in Python, which is not the case.
  • Failing to handle cases where the queue is empty during dequeue operations.
  • Not understanding the difference between deque.extendleft() and deque.appendleft(). The former adds multiple elements at the front of a deque, while the latter adds a single element.

Subheadings under Common Mistakes

  1. Importing the collections module
  2. Using append() instead of appendleft()
  3. Using pop() with an argument
  4. Assuming thread-safety in Python
  5. Handling empty dequeues during operations
  6. Understanding extendleft() and appendleft()

Practice Questions

  1. Write a function called reverse_deque(deque) that reverses the order of elements in a given deque.
  2. Implement a function called max_element(deque) that finds and returns the maximum element from a given deque.
  3. Write a function called min_deque(elements) that creates a deque from a list of numbers and returns the minimum element in the resulting deque.
  4. Implement a function called rotate_left(deque, k) that rotates the elements in a given deque to the left by k positions.
  5. Write a function called is_palindrome(deque) that checks if a given deque represents a palindrome (reads the same forwards and backwards).
  6. Implement a function called find_median(deque) that finds and returns the median element in an odd-length deque, or the average of the two middle elements in an even-length deque.
  7. Write a function called merge_sorted_deques(deque1, deque2) that merges two sorted deques into one sorted deque.
  8. Implement a function called find_first_occurrence(deque, target) that finds and returns the first occurrence of a given target element in a deque. If the target is not found, return None.
  9. Write a function called remove_duplicates(deque) that removes duplicate elements from a given deque, preserving the original order of non-duplicate elements.
  10. Implement a function called find_longest_substring(deque) that finds and returns the longest substring in a given deque without repeating any characters. If there are multiple such substrings, return the lexicographically smallest one.

FAQ

What is the time complexity of adding an element to the front or rear of a Python deque?

Adding an element to the front or rear of a Python deque has a constant time complexity of O(1), making it an efficient choice for operations that require frequent additions at both ends.

Can I use a list as a deque in Python?

While you can use a list as a simple double-ended queue, the built-in deque data type from the collections module provides more efficient addition and removal of elements from both ends.

Is it possible to create an empty deque in Python without using the deque() constructor?

Yes, you can create an empty deque by initializing a list and then converting it into a deque using the deque(list) constructor:

my_empty_deque = deque([])
Dequeue Operation (Data Structures & Algorithms) | Data Structures & Algorithms | XQA Learn