Vous êtes sur la page 1sur 2

Prof. Dr.

Holger Peine Datenstrukturen und Algorithmen - Übungsblatt 4 - SS2015


Prof. Dr. Holger Peine
DSA - Übungsblatt 4 Hochschule Hannover

SS 2015 (Stand 2015-04-24 12:14) Fakultät IV – Abteilung Informatik


Raum 334, Tel. 0511-9296-1830
Holger.Peine@hs-hannover.de

Thema
Stacks und Queues

Spätester Termin
… für die Vorführung der Pflichtaufgabe (15): Fr. 08.05.2015.

Aufgaben mit Punkten sollten Sie bevorzugt bearbeiten, da sie sich mit zentralen Themenstellungen
auseinandersetzen. Weitere Übungsaufgaben (0 Punkte) dienen der Vertiefung spezieller Teilbereiche. Es gilt: Die
Inhalte aller Übungsaufgaben und aller Vorlesungen sind Gegenstand der Prüfung.

Aufgabe 13: Stacks (0 Punkte)


a) Geben Sie den Rückgabewert und den jeweiligen Stack-Inhalt nach jeder der folgenden
Operationen auf einem anfangs leeren Stack an:
push(5), push(3), pop(), push(2), push(8), pop(), pop(), push(9),
push(1), pop(), push(7), push(6), pop(), pop(), push(4), pop(),
pop()
b) Implementieren Sie eine Klasse ArrayDoubleStack<E>, die in einem Array zwei getrennte
Stacks speichert. Alle Operationen des ADT Stack sollen implementiert werden, jeweils ergänzt
um einen int-Parameter, der angibt, ob sich die Operation auf Stack 1 oder 2 beziehen soll.
Falls für den Stackwahl-Parameter ein anderer Wert als 1 oder 2 übergeben wird, sollen die
betroffenen Methoden eine IllegalArgumentException werfen (das ist eine Standard-
Java-Exception, die Sie nicht noch definieren müssen). Alle Operationen sollen die Laufzeit O(1)
besitzen; die Anzahl der Elemente in beiden Stacks zusammen darf durch die Größe des Array
beschränkt sein.
Als Hilfestellung können Sie sich die Klasse net.datastructures.chapter2.
ArrayStack<E> für einen einzelnen mit einem Array implementierten Stack auf dem Skripte-
Server ansehen.
Testen Sie Ihren ArrayDoubleStack mit der Klasse ArrayDoubleStackTester, die Sie
im Package uebungen.aufgabe13 auf dem Skripte-Server finden. Diese Klasse setzt voraus,
dass Ihr ArrayDoubleStack<E> eine Methode toString() hat, die den Inhalt der beiden
Stacks ausgibt (die toString()-Methode muss die Anforderung O(1) nicht erfüllen, sondern
nur O(n) sein).
c) Warum wird in Teilaufgabe (b) nicht verlangt, dass ArrayDoubleStack<E> den ADT
Stack<E> aus der Vorlesung implementieren soll?
Stand 2015-04-24 12:14 Seite 1 von 2
Prof. Dr. Holger Peine Datenstrukturen und Algorithmen - Übungsblatt 4 - SS2015

Aufgabe 14: Queues (0 Punkte)


Geben Sie den Rückgabewert und den jeweiligen Inhalt einer anfangs leeren Queue nach jeder der
folgenden Operationen an:
enqueue(5), enqueue(3), dequeue(), enqueue(2), enqueue(8), dequeue(),
dequeue(), enqueue(9), enqueue(1), dequeue(), enqueue(7), enqueue(6),
dequeue(), dequeue(), enqueue(4), dequeue(), dequeue()

Aufgabe 15: Stacks und Queues (2 Punkte)


a) Beschreiben Sie einen Algorithmus reverse(Q) in Pseudo-Code, der die Elemente einer
Queue Q in ihrer Reihenfolge umkehrt. Er soll die Laufzeitklasse O(n) haben, wobei n die Anzahl
der Elemente in Q ist. Sie dürfen nur die Methoden des ADT Queue sowie bei Bedarf weitere,
von der Queue unabhängige Hilfsdatenstrukturen verwenden. Nach dem Umkehren der
Elemente sollen diese wieder in der ursprünglichen Queue Q stehen. Begründen Sie, warum Ihr
Algorithmus die Laufzeitklasse O(n) hat.

b) Implementieren Sie in Java eine Klasse QueueStack<E>, die den ADT


net.datastructures.chapter2.Stack<E> implementiert. Dabei sollen intern nur
Implementierungen einer Queue als Hilfsdatenstrukturen verwendet werden. Wie sind die
Laufzeiten der Operationen des ADT Stack<E> in diesem Falle? Geben Sie Ihrer Klasse auch
eine main()-Methode, die die Klasse testet.
Verwenden Sie als interne Implementierung einer Queue (falls Sie eine solche benötigen) die auf
dem Skripte-Server zur Verfügung gestellte Klasse net.datastructures.chapter2.
NodeQueue<E>.

Stand 2015-04-24 12:14 Seite 2 von 2

Vous aimerez peut-être aussi