Queues Explained With Real Examples
A queue is a data structure where the first item added is the first item removed. This is called **first in, first out**, or **FIFO**. The everyday example is a line at a coffee shop. The first person in line should be served first. New people join the back of the line. Queues are useful whenever work should be handled in the order it arrives. You will see queues in:
- background jobs
- task processing
- print jobs
- message systems
- breadth-first search
- request handling
- event processing The idea is simple, but it is one of the foundations of real software systems.
The Mental Model
A queue usually has two main operations:
| Operation | Meaning |
| --- | --- |
| Enqueue | Add an item to the back |
| Dequeue | Remove an item from the front |
The first item in is the first item out. ```plain text front -> "first" "second" "third" <- back
If we dequeue, \`"first"\` comes out first.
Then \`"second"\`.
Then \`"third"\`.
## A Small Python Example
For simple examples, you might be tempted to use a list:
```python
queue = []
queue.append("first")
queue.append("second")
queue.append("third")
print(queue.pop(0)) # first
This shows the idea, but `pop(0)` can be inefficient because Python has to shift the remaining items. For a real queue in Python, use `collections.deque`.
from collections import deque
queue = deque()
queue.append("first")
queue.append("second")
queue.append("third")
print(queue.popleft()) # first
print(queue.popleft()) # second
print(queue.popleft()) # third
`deque` is designed for efficient additions and removals from both ends.
Task Processing Example
Imagine a small system that needs to process tasks in the order they arrive.
from collections import deque
tasks = deque()
tasks.append("send welcome email")
tasks.append("generate invoice")
tasks.append("sync customer record")
while tasks:
task = tasks.popleft()
print(f"Processing: {task}")
Output: ```plain text Processing: send welcome email Processing: generate invoice Processing: sync customer record
That is queue behavior.
The oldest task gets processed first.
## Queues vs Stacks
Queues and stacks are easy to mix up.
```markdown
| Structure | Rule | Real-world example |
| --- | --- | --- |
| Stack | Last in, first out | Stack of plates |
| Queue | First in, first out | Line at a coffee shop |
Use a stack when the most recent item should be handled first. Use a queue when the oldest item should be handled first.
Breadth-First Search
Queues are also important in algorithms. Breadth-first search uses a queue to explore items in layers. Here is a small graph traversal example:
from collections import deque
graph = {
"A": ["B", "C"],
"B": ["D"],
"C": ["E"],
"D": [],
"E": [],
}
def breadth_first_search(start):
visited = set()
queue = deque([start])
while queue:
node = queue.popleft()
if node in visited:
continue
print(node)
visited.add(node)
for neighbor in graph[node]:
queue.append(neighbor)
breadth_first_search("A")
Output: ```plain text A B C D E
The queue makes sure nodes are explored in the order they are discovered.
## Common Mistakes
### Mistake 1: Using \`list.pop(0)\` for large queues
For tiny examples, \`pop(0)\` is fine.
For larger or frequent queues, use \`deque\`.
```python
from collections import deque
It is the right tool for queue-like behavior in Python.
Mistake 2: Confusing queue order
If you add: ```plain text first, second, third
A queue gives them back as:
```plain text
first, second, third
A stack gives them back as:
plain text
third, second, first
That difference matters.
Mistake 3: Forgetting that real job queues need reliability
A data structure queue is the basic idea. Production job queues also need things like:
- retries
- persistence
- failure handling
- worker processes
- monitoring The data structure is the mental model. Real systems add operational details.
Where This Shows Up in Real Projects
Queues show up in practical software constantly:
- email sending jobs
- image processing jobs
- order fulfillment workflows
- background imports
- notification systems
- task runners
- event processing For example, if a user uploads a file, a web app may put a processing task into a queue instead of making the user wait on the request. The user gets a fast response. The queue handles the work in the background.
Key Takeaways
- A queue is first in, first out.
- Enqueue adds to the back.
- Dequeue removes from the front.
- Python's `deque` is useful for queue behavior.
Queues are common in background jobs and breadth-first search.
Related Articles
Stacks Explained With Real Examples
- Linked Lists Explained From Scratch
- Binary Search Explained With Examples