Deque
Doppelendige Warteschlangenimplementierung mit effizienten Einfüge- und Löschoperationen an beiden Enden.
Installation
- npm
- pnpm
- yarn
- Deno (JSR)
- Browser (CDN)
npm install @msnkr/data-structurespnpm install @msnkr/data-structuresyarn add @msnkr/data-structuresimport { Deque } from 'jsr:@mskr/data-structures';<script type="module">
import { Deque } from 'https://esm.sh/jsr/@mskr/data-structures';
</script>Verwendung
import { Deque } from '@msnkr/data-structures';
const deque = new Deque<number>();
API-Referenz
Eigenschaften
size: number- Anzahl der Elemente in der DequeisEmpty(): boolean- Ob die Deque leer ist
Methoden
Elemente hinzufügen
// Am Anfang hinzufügen - O(1)
deque.addFirst(1);
// Am Ende hinzufügen - O(1)
deque.addLast(2);
Leistung
Hinzufüge- und Löschoperationen an beiden Enden erfolgen in O(1) konstanter Zeit.
Elemente entfernen
// Vom Anfang entfernen - O(1)
const first = deque.removeFirst();
// Vom Ende entfernen - O(1)
const last = deque.removeLast();
Auf Elemente zugreifen
// Erstes Element ansehen - O(1)
const first = deque.peekFirst();
// Letztes Element ansehen - O(1)
const last = deque.peekLast();
// Element-Existenz prüfen - O(n)
const exists = deque.contains(1);
Iteration
// Vorwärtsiteration (vom Anfang zum Ende)
for (const value of deque) {
console.log(value);
}
// Rückwärtsiteration (vom Ende zum Anfang)
for (const value of deque.reverseIterator()) {
console.log(value);
}
Weitere Operationen
// Alle Elemente entfernen - O(1)
deque.clear();
// In Array konvertieren - O(n)
const array = deque.toArray();
Beispiele
Grundlegende Verwendung an beiden Enden
const deque = new Deque<number>();
// Elemente an beiden Enden hinzufügen
deque.addFirst(1); // [1]
deque.addLast(2); // [1, 2]
deque.addFirst(0); // [0, 1, 2]
console.log([...deque]); // [0, 1, 2]
Warteschlangenoperationen (FIFO)
const queue = new Deque<string>();
// Einreihen
queue.addLast('first');
queue.addLast('second');
// Entfernen
const first = queue.removeFirst(); // "first"
const second = queue.removeFirst(); // "second"
Stapeloperationen (LIFO)
const stack = new Deque<number>();
// Push
stack.addFirst(1);
stack.addFirst(2);
// Pop
const top = stack.removeFirst(); // 2
Fehlerbehandlung
import { EmptyStructureError } from '@msnkr/data-structures';
try {
const empty = new Deque<number>();
empty.removeFirst(); // Wirft EmptyStructureError
} catch (error) {
if (error instanceof EmptyStructureError) {
console.log('Deque is empty!');
}
}
Leere Deque
Das Aufrufen von removeFirst(), removeLast(), peekFirst() oder peekLast() auf einer leeren Deque wirft einen EmptyStructureError.
Leistungsmerkmale
| Operation | Zeitkomplexität | Beschreibung |
|---|---|---|
addFirst() | O(1) | Element am Anfang hinzufügen |
addLast() | O(1) | Element am Ende hinzufügen |
removeFirst() | O(1) | Element vom Anfang entfernen |
removeLast() | O(1) | Element vom Ende entfernen |
peekFirst() | O(1) | Erstes Element ansehen |
peekLast() | O(1) | Letztes Element ansehen |
contains() | O(n) | Nach Element suchen |
clear() | O(1) | Alle Elemente entfernen |
toArray() | O(n) | In Array konvertieren |
Anwendungsfälle
Deque ist ideal für:
- Doppelendige Puffer
- Gleichzeitiges Implementieren von Warteschlangen und Stapeln
- Sliding-Window-Algorithmen
- Rückgängig/Wiederholen-Stapel
Siehe auch
- Queue - First In First Out (FIFO) Warteschlange mit O(1) Enqueue/Dequeue
- PriorityQueue - Warteschlange mit prioritätsbasierter Sortierung