# Compare and Contrast a Queue with a Stack.
### **Comparison Of Queue and Stack**
|**Aspect**|**Stack**|**Queue**|
|---|---|---|
|**Definition**|A stack is a collection of elements that follows the **Last-In, First-Out (LIFO)** principle: the last element added is the first one removed.|A queue is a collection of elements that follows the **First-In, First-Out (FIFO)** principle: the first element added is the first one removed.|
|**Primary Operations**|- **Push**: Add an element to the top of the stack.
- **Pop**: Remove the top element of the stack.
- **Peek/Top**: View the top element without removing it.|- **Enqueue**: Add an element to the back of the queue.
- **Dequeue**: Remove the element from the front of the queue.
- **Front**: View the element at the front without removing it.|
|**Order of Removal**|LIFO: Last element inserted is the first to be removed.|FIFO: First element inserted is the first to be removed.|
|**Structure**|Operates on a single end of the collection (top).|Operates on both ends: elements are added at the back and removed from the front.|
|**Real-World Analogy**|A stack of plates: the last plate added is the first one removed.|A line (queue) at a ticket counter: the first person in line is the first one served.|
|**Applications**|- Function call stack
- Undo operations in software
- Backtracking algorithms (e.g., maze solving)
- Expression evaluation and parsing|- Task scheduling (e.g., printer queue)
- Breadth-first search (BFS) in graphs
- Data buffers (e.g., IO buffers)
- Handling requests in web servers|
|**Performance**|Both `push` and `pop` are O(1)O(1)O(1) operations in most implementations.|Both `enqueue` and `dequeue` are O(1)O(1)O(1) operations in most implementations.|
|**Types/Variants**|- Simple Stack
- Double Stack
- Min/Max Stack (keeps track of min/max values)|- Simple Queue
- Circular Queue
- Priority Queue (elements removed based on priority, not order)
- Deque (Double-Ended Queue)|
---
### **Key Differences**
|**Aspect**|**Stack**|**Queue**|
|---|---|---|
|**Access Pattern**|LIFO (Last-In, First-Out)|FIFO (First-In, First-Out)|
|**Addition (Insert)**|Always at the top of the stack.|Always at the back of the queue.|
|**Removal (Delete)**|Always from the top of the stack.|Always from the front of the queue.|
|**Flexibility in Ends**|Operates only on one end (top).|Operates on both ends (front and back).|
---
### **Real-World Examples**
#### **Stack Examples**:
1. **Undo Feature in Text Editors**:
- When you perform actions, they are stored in a stack. Undoing removes the last action first.
2. **Browser Back Button**:
- Tracks visited pages in a stack; the last page visited is the first to be returned when you press "Back."
#### **Queue Examples**:
1. **Ticket Counter**:
- People stand in line (queue), and the first person in line is served first.
2. **Task Scheduling**:
- Jobs sent to a printer are handled in the order they are received (FIFO).
---
### **Summary**:
- A **stack** is suitable for tasks where the most recent action needs to be undone or processed first (**LIFO**).
- A **queue** is ideal for tasks where the first action needs to be processed first (**FIFO**).