51 lines
3.2 KiB
Markdown
Executable File
51 lines
3.2 KiB
Markdown
Executable File
# 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. <br>- **Pop**: Remove the top element of the stack. <br>- **Peek/Top**: View the top element without removing it.|- **Enqueue**: Add an element to the back of the queue. <br>- **Dequeue**: Remove the element from the front of the queue. <br>- **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 <br>- Undo operations in software <br>- Backtracking algorithms (e.g., maze solving) <br>- Expression evaluation and parsing|- Task scheduling (e.g., printer queue) <br>- Breadth-first search (BFS) in graphs <br>- Data buffers (e.g., IO buffers) <br>- 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 <br>- Double Stack <br>- Min/Max Stack (keeps track of min/max values)|- Simple Queue <br>- Circular Queue <br>- Priority Queue (elements removed based on priority, not order) <br>- 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**).
|