Advanced Queue Types
Priority Queue
A priority queue is a specialized queue where elements have different priorities. Elements with higher priority are dequeued first.
#include <queue>
#include <vector>
std::priority_queue<int> maxHeap; // Default: max-priority
std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
Key Characteristics
Feature |
Description |
Ordering |
Elements sorted by priority |
Use Cases |
Task scheduling, graph algorithms |
Time Complexity |
O(log n) for insertion/deletion |
Circular Queue
A fixed-size queue that wraps around when it reaches its maximum capacity.
class CircularQueue {
private:
int* arr;
int front, rear, capacity, size;
public:
CircularQueue(int cap) {
arr = new int[cap];
capacity = cap;
front = rear = -1;
size = 0;
}
void enqueue(int x) {
if (isFull()) return;
rear = (rear + 1) % capacity;
arr[rear] = x;
size++;
}
int dequeue() {
if (isEmpty()) return -1;
front = (front + 1) % capacity;
size--;
return arr[front];
}
};
Double-Ended Queue (Deque)
Allows insertion and deletion from both ends.
#include <deque>
std::deque<int> myDeque;
myDeque.push_front(10); // Insert at beginning
myDeque.push_back(20); // Insert at end
myDeque.pop_front(); // Remove from beginning
myDeque.pop_back(); // Remove from end
Thread-Safe Queue
#include <queue>
#include <mutex>
#include <condition_variable>
template <typename T>
class SafeQueue {
private:
std::queue<T> queue;
std::mutex mutex;
std::condition_variable cond;
public:
void enqueue(T item) {
std::unique_lock<std::mutex> lock(mutex);
queue.push(item);
cond.notify_one();
}
T dequeue() {
std::unique_lock<std::mutex> lock(mutex);
cond.wait(lock, [this]{ return !queue.empty(); });
T item = queue.front();
queue.pop();
return item;
}
};
Queue Visualization
graph TD
A[Priority Queue] --> B[Highest Priority First]
C[Circular Queue] --> D[Fixed Capacity]
E[Deque] --> F[Bidirectional Operations]
G[Thread-Safe Queue] --> H[Synchronized Access]
Queue Type |
Insertion |
Deletion |
Memory Overhead |
Standard Queue |
O(1) |
O(1) |
Low |
Priority Queue |
O(log n) |
O(log n) |
Moderate |
Circular Queue |
O(1) |
O(1) |
Fixed |
Deque |
O(1) |
O(1) |
Higher |
Advanced Use Cases
- Network packet routing
- Multithreaded task management
- Real-time system scheduling
- Caching mechanisms
Explore these advanced queue types in your LabEx programming projects to optimize data management and processing efficiency.