Doppelstapel

In der Informatik ist ein Doppelstapel (entfernen häufig abgekürzt zu deque, ausgesprochenem Deck), ein abstrakter Datentyp, der eine Warteschlange durchführt, nach der Elemente nur dazu hinzugefügt oder von der Vorderseite (Kopf) oder Rücken (Schwanz) entfernt werden können. Es wird auch häufig genannt ein Hauptschwanz hat Liste verbunden.

Das Namengeben der Vereinbarung

Deque wird manchmal geschrieben entfernen, aber dieser Gebrauch wird allgemein in der technischen Literatur oder dem technischen Schreiben missbilligt, weil entfernen, ist auch ein Verb, das bedeutet, "um von einer Warteschlange umzuziehen". Dennoch, mehrere Bibliotheken und einige Schriftsteller, wie Aho, Hopcroft und Ullman in ihren Lehrbuch-Datenstrukturen und Algorithmen, Periode entfernt es. John Mitchell, Autor von Konzepten auf Programmiersprachen, verwendet auch diese Fachsprache.

Unterscheidungen und Subtypen

Das unterscheidet sich vom Warteschlange-Auszug-Datentyp oder Zuerst im Ersten Liste (FIFO), wo Elemente nur zu einem Ende hinzugefügt und vom anderen entfernt werden können. Diese allgemeine Datenklasse hat einige mögliche Subtypen:

  • Ein eingangseingeschränkter deque ist derjenige, wo Auswischen von beiden Enden gemacht werden kann, aber Einfügung kann nur an einem Ende gemacht werden.
  • Ein Produktionseingeschränkter deque ist derjenige, wo Einfügung an beiden Enden gemacht werden kann, aber Auswischen kann von einem Ende nur gemacht werden.

Sowohl die grundlegenden als auch allgemeinsten Listentypen in der Computerwissenschaft, den Warteschlangen und den Stapeln können als Spezialisierungen von deques betrachtet werden, und können mit deques durchgeführt werden.

Operationen

Die folgenden Operationen sind auf einem deque möglich:

Durchführungen

Es gibt mindestens zwei allgemeine Weisen, einen deque effizient durchzuführen: mit einer modifizierten dynamischen Reihe oder mit einer doppelt verbundenen Liste.

Die dynamische Reihe-Annäherung verwendet eine Variante einer dynamischen Reihe, die von beiden Enden, manchmal genannt Reihe deques wachsen kann. Diese ordnen deques haben alle Eigenschaften einer dynamischen Reihe, wie unveränderliche Zeit zufälliger Zugang, gute Gegend der Verweisung und ineffiziente Einfügung/Eliminierung in der Mitte mit der Hinzufügung der amortisierten unveränderlichen Zeiteinfügung/Eliminierung an beiden Enden statt gerade eines Endes. Drei allgemeine Durchführungen schließen ein:

  • deque Inhalts in einem kreisförmigen Puffer Speicherung, und nur in der Größe anpassend, wenn der Puffer völlig voll wird. Das vermindert die Frequenz von resizings.
  • deque Inhalts vom Zentrum der zu Grunde liegenden Reihe Zuteilen, und die zu Grunde liegende Reihe in der Größe anpassend, wenn jedes Ende erreicht wird. Diese Annäherung kann häufigeren resizings verlangen und mehr Raum besonders vergeuden, wenn Elemente nur an einem Ende eingefügt werden.
  • Die Speicherung des Inhalts in der vielfachen kleineren Reihe, das Zuteilen der zusätzlichen Reihe am Anfang oder Ende, wie erforderlich. Das Indexieren wird durch das Halten einer dynamischen Reihe durchgeführt, die Zeigestöcke zu jeder der kleineren Reihe enthält.

Sprachunterstützung

Die Behälter von Ada stellen die allgemeinen Pakete und, für die dynamische Reihe und verbundenen Listendurchführungen beziehungsweise zur Verfügung.

C ++ 's Standardschablone-Bibliothek stellt die Klassenschablonen und, für die vielfache Reihe und verbundenen Listendurchführungen beziehungsweise zur Verfügung.

Bezüglich Javas 6 stellt Javas Sammlungsfachwerk eine neue Schnittstelle zur Verfügung, die die Funktionalität der Einfügung und Eliminierung an beiden Enden zur Verfügung stellt. Es wird durch Klassen solcher als (auch neu in Java 6) durchgeführt und, die dynamische Reihe zur Verfügung stellend, und hat Listendurchführungen beziehungsweise verbunden. Jedoch, gegen seinen Namen, unterstützt zufälligen Zugang nicht.

Pythonschlange 2.4 hat das Modul mit der Unterstützung für Deque-Gegenstände eingeführt.

Bezüglich PHP 5.3 enthält die SPL Erweiterung von PHP die Klasse 'von SplDoublyLinkedList', die verwendet werden kann, um Deque datastructures durchzuführen. Vorher, um Deque die Reihe-Funktionen strukturieren zu lassen, musste array_shift/unshift/pop/push stattdessen verwendet werden.

Die Daten von GHC. Folge-Modul führt eine effiziente, funktionelle deque Struktur in Haskell durch. Die Durchführung verwendet 2-3 mit Größen kommentierte Finger-Bäume. Es gibt andere (schnelle) Möglichkeiten, rein funktionell (so auch beharrlich) doppelte Warteschlangen (der grösste Teil verwendenden schwer faulen Einschätzung) durchzuführen, Verweisungen zu sehen.

Kompliziertheit

  • In einer doppelt verbundenen Listendurchführung und dem Annehmen keines allocation/deallocation oben ist die Zeitkompliziertheit aller deque Operationen O (1). Zusätzlich ist die Zeitkompliziertheit der Einfügung oder des Auswischens in der Mitte, in Anbetracht eines iterator, O (1); jedoch ist die Zeitkompliziertheit des zufälligen Zugangs durch den Index O (n).
  • In einer wachsenden Reihe ist die amortisierte Zeitkompliziertheit aller deque Operationen O (1). Zusätzlich ist die Zeitkompliziertheit des zufälligen Zugangs durch den Index O (1); aber die Zeitkompliziertheit der Einfügung oder des Auswischens in der Mitte ist O (n).

Anwendungen

Ein Beispiel, wo ein deque verwendet werden kann, ist der A-Diebstahl-Job-Terminplanungsalgorithmus. Dieser Algorithmus führt Aufgabe-Terminplanung für mehrere Verarbeiter durch. Ein getrennter deque mit durchzuführenden Fäden wird für jeden Verarbeiter aufrechterhalten. Um den folgenden Faden durchzuführen, kommt der Verarbeiter das erste Element vom deque (verwendend, "entfernen das erste Element" deque Operation). Wenn die aktuellen Faden-Gabeln, es zur Vorderseite des deque zurückgestellt wird ("Einsatz-Element an der Vorderseite") und ein neuer Faden durchgeführt wird. Wenn eine der Verarbeiter-Schluss-Ausführung seiner eigenen Fäden (d. h. sein deque ist leer), es einen Faden einem anderen Verarbeiter "stehlen" kann: Es kommt das letzte Element vom deque eines anderen Verarbeiters ("entfernen letztes Element"), und führt es durch.

Siehe auch

Außenverbindungen


Urteilsvermögen / Diene
Impressum & Datenschutz