Erweiterte Warteschlangentypen
Prioritätswarteschlange
Eine Prioritätswarteschlange ist eine spezialisierte Warteschlange, bei der Elemente unterschiedliche Prioritäten haben. Elemente mit höherer Priorität werden zuerst entnommen.
#include <queue>
#include <vector>
std::priority_queue<int> maxHeap; // Standardmäßig: maximale Priorität
std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
Hauptmerkmale
Merkmal |
Beschreibung |
Sortierung |
Elemente nach Priorität sortiert |
Anwendungsfälle |
Aufgabenplanung, Graphalgorithmen |
Zeitkomplexität |
O(log n) für Einfügen/Entfernen |
Kreisförmige Warteschlange
Eine Warteschlange fester Größe, die sich bei Erreichen der maximalen Kapazität umwickelt.
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];
}
};
Doppelt endliche Warteschlange (Deque)
Ermöglicht das Einfügen und Entfernen von Elementen an beiden Enden.
#include <deque>
std::deque<int> myDeque;
myDeque.push_front(10); // Einfügen am Anfang
myDeque.push_back(20); // Einfügen am Ende
myDeque.pop_front(); // Entfernen vom Anfang
myDeque.pop_back(); // Entfernen vom Ende
Thread-sichere Warteschlange
#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;
}
};
Visualisierung der Warteschlangen
graph TD
A[Prioritätswarteschlange] --> B[Höchste Priorität zuerst]
C[Kreisförmige Warteschlange] --> D[Feste Kapazität]
E[Deque] --> F[Zweiseitige Operationen]
G[Thread-sichere Warteschlange] --> H[Synchronisierter Zugriff]
Leistungsüberlegungen
Warteschlangentyp |
Einfügen |
Löschen |
Speicherbedarf |
Standardwarteschlange |
O(1) |
O(1) |
Gering |
Prioritätswarteschlange |
O(log n) |
O(log n) |
Mittel |
Kreisförmige Warteschlange |
O(1) |
O(1) |
Fest |
Deque |
O(1) |
O(1) |
Höher |
Erweiterte Anwendungsfälle
- Netzwerkpaketweiterleitung
- Mehrgängige Aufgabenverwaltung
- Echtzeit-Systemplanung
- Caching-Mechanismen
Erkunden Sie diese erweiterten Warteschlangentypen in Ihren LabEx-Programmierprojekten, um die Datenverwaltung und die Verarbeitungseffizienz zu optimieren.