www.wikidata.de-de.nina.az
Ein Deque Double ended queue sprich Deck bezeichnet eine Datenstruktur der Informatik Hierbei handelt es sich um eine Datenstruktur ahnlich der Warteschlange oder des Stapelspeichers Es kombiniert die Eigenschaften beider Datentypen Der Unterschied besteht darin dass die Daten an beiden Enden gelesen eingefugt oder entfernt werden konnen Inhaltsverzeichnis 1 Eigenschaften 2 Programmierung 3 Siehe auch 4 Weblinks 5 EinzelnachweiseEigenschaften BearbeitenDie Operationen eines Deque die in den Programmbibliotheken verschiedener Programmiersprachen nicht einheitlich benannt sind push und pop fur das Einfugen oder Entnehmen eines Elements am hinteren Ende der Deque put und get fur das Einfugen oder Entnehmen am vorderen Ende der Deque first und last fur das Lesen des ersten oder letzten Elementes ohne es zu entfernen Technisch wird ein Deque entweder als doppelt verkettete Liste realisiert also ahnlich wie bei der Warteschlange oder dem Stapelspeicher oder als Feld mit Hilfsindizes Deques sind Sequenzcontainer mit dynamischen Grossen die an beiden Enden entweder vorne oder hinten erweitert oder verkleinert werden konnen Bestimmte Programmbibliotheken konnen Deques auf unterschiedliche Weise implementieren im Allgemeinen als eine Form eines dynamischen Arrays In jedem Fall ermoglichen sie jedoch den direkten Zugriff auf die einzelnen Elemente uber Iteratoren mit wahlfreiem Zugriff wobei der Speicher automatisch verwaltet wird indem der Container nach Bedarf erweitert und verkleinert wird Daher bieten sie eine ahnliche Funktionalitat wie Arrays jedoch mit effizienter Einfugung und Loschung von Elementen auch am Anfang der Sequenz und nicht nur am Ende Im Gegensatz zu Arrays wird jedoch nicht garantiert dass Deques alle ihre Elemente an zusammenhangenden Speicheradressen speichern Der Zugriff auf Elemente in einer Deque durch Versetzen eines Zeigers auf ein anderes Element fuhrt zu undefiniertem Verhalten Sowohl dynamischen Arrays als auch Deques bieten eine sehr ahnliche Schnittstelle und konnen fur ahnliche Zwecke verwendet werden aber intern funktionieren beide auf ganz unterschiedliche Weise Wahrend Vektoren ein einzelnes Array verwenden das gelegentlich fur das Wachstum neu zugewiesen werden muss konnen die Elemente eines Deque auf verschiedene Speicherblocke verstreut werden wobei der Container die erforderlichen Informationen intern speichert um in konstanter Laufzeit und mit einer einheitlichen sequentiellen Schnittstelle uber Iteratoren direkten Zugriff auf eines seiner Elemente zu ermoglichen Daher sind Deques intern etwas komplexer aber dies ermoglicht es ihnen unter bestimmten Umstanden effizienter zu wachsen insbesondere bei sehr langen Sequenzen bei denen Neuzuweisungen teurer werden Bei Operationen bei denen Elemente haufig an anderen Positionen als am Anfang oder am Ende eingefugt oder entfernt werden sind Deques schlechter und weisen weniger konsistente Iteratoren und Referenzen auf als Listen 1 In der Praxis verwendet man die Deque unter anderem zur Implementierung von nichtdeterministischen endlichen Automaten und zur Textsuche mittels regularer Ausdrucke Pattern Matching Algorithmus Programmierung BearbeitenDas folgende Beispiel in der Programmiersprache C mit Spielkarten zeigt die Verwendung der Klasse deque der C Standardbibliothek siehe auch Template C Klassen Templates Bei der Ausfuhrung des Programms wird die Methode main verwendet 2 include lt deque gt Bindet den Datentyp deque in das Programm ein include lt iostream gt using namespace std int main deque lt string gt myDeque Deklariert ein Deque mit dem Elementtyp string Fugt dem Deque 3 Elemente vom Typ string am Ende hinzu myDeque push back Kreuz Bube myDeque push back Herz Dame myDeque push back Karo Konig int n myDeque size Weist die Anzahl der Elemente der Variablen n zu cout lt lt Die Lange des Deque ist lt lt n lt lt endl Ausgabe auf der Konsole string card myDeque front Weist das Element am Anfang Kreuz Bube der Variablen card zu cout lt lt Die Karte am Anfang der Deque ist lt lt card lt lt endl Ausgabe auf der Konsole card myDeque back Weist das Element am Ende Karo Konig der Variablen card zu cout lt lt Die Karte am Ende der Deque ist lt lt card lt lt endl Ausgabe auf der Konsole cout lt lt toString myDeque lt lt endl Ausgabe auf der Konsole Kreuz Bube Herz Dame Karo Konig myDeque push front Kreuz 10 Fugt 1 Element am Anfang des Deque ein n myDeque size Weist die Anzahl der Elemente der Variablen n zu cout lt lt Die Lange des Deque ist lt lt n lt lt endl Ausgabe auf der Konsole cout lt lt toString myDeque lt lt endl Ausgabe auf der Konsole Kreuz 10 Kreuz Bube Herz Dame Karo Konig myDeque pop back Entfernt das Element am Ende cout lt lt toString myDeque lt lt endl Ausgabe auf der Konsole Kreuz 10 Kreuz Bube Herz Dame myDeque push back Karo Ass Fugt dem Deque 1 Element am Ende hinzu cout lt lt toString myDeque lt lt endl Ausgabe auf der Konsole Kreuz 10 Kreuz Bube Herz Dame Karo Ass myDeque pop front Entfernt das Element am Anfang cout lt lt toString myDeque lt lt endl Ausgabe auf der Konsole Kreuz Bube Herz Dame Karo Ass Fur die Ausgabe des Deque wird folgende Methode verwendet Diese Methode gibt das Deque in der Form A B C als Text zuruck string toString deque lt string gt aDeque string text for int i 0 i lt aDeque size 1 i for Schleife text aDeque at i Greift auf das Element mit dem Index i zu text aDeque at aDeque size 1 return text Fur die Programmierung von Kartenspielen und Gesellschaftsspielen mit Stapeln bei denen wahrend des Spiels Karten auf einen Stapel gelegt oder von einem Stapel gezogen wird sind stattdessen Stacks geeignet siehe Stapelspeicher Beispiel mit Spielkarten Siehe auch BearbeitenWarteschlange Datenstruktur Stapelspeicher Doppelt verkettete Liste Heap Datenstruktur IteratorWeblinks Bearbeitenwww geeksforgeeks org Implementation of Deque using doubly linked listEinzelnachweise Bearbeiten www cplusplus com deque Microsoft Docs deque Class Abgerufen von https de wikipedia org w index php title Deque amp oldid 228178812