Double-Ended Queues
Explore how double-ended queues, or deques, provide versatile data handling by supporting efficient insertion and deletion from both ends. Learn their implementation in C++, core operations with O(1) time complexity, variations like input/output restricted deques, and practical applications such as sliding window problems and undo/redo functionality.
A deque stands for a double-ended queue. It is a more flexible version of a queue that allows insertion and deletion from both the front and the rear.
In a normal queue, insertion happens only at the rear and deletion happens only at the front. In a deque, both ends are fully active.
This makes the deque a generalization that can behave like a queue, a stack, or something in between, depending on how it is used.
A deque is useful when a problem needs controlled access to both ends of the structure. It appears in sliding window problems, palindrome checking, scheduling, and caching systems.
Example
To understand how a deque works, consider the following example. If a deque currently contains:
After inserting 88 at the front, the deque becomes:
After inserting 91 at the rear, the deque becomes:
After removing 88 from the front, the deque becomes:
After removing 91 from the rear, the deque becomes:
This two-sided behavior is what makes the deque more versatile than a regular queue.
C++ implementation
C++ provides std::deque (double-ended queue) in the <deque> header. Unlike some other languages that have a separate deque class, C++'s std::deque ...