Informatik Bachelor 1. Semester WS 2016/17 Prof. Dr. Wolfgang Schramm Algorithmen und Datenstrukturen (ADS)
Ubungsblatt 5 ¨
Ausgabe: 1.12.2016
Abgabe: 15.12.2016 (23:59 Uhr)
Aufgabe 1: ADT Liste - Programmieraufgabe - 60 Punkte
(a) In der Vorlesung wurde der ADT Liste vorgestellt, dessen Methoden Sie in der Klasse LinkedListim- plementieren sollen. ¨Uberlegen Sie sich vorher genau, welche Parameter und welchen R¨uckgabetyp Sie f¨ur die jeweiligen Methoden ben¨otigen. In der Liste werden nur einfacheint-Werte gespeichert.
Erg¨anzen Sie die aus der Vorlesung bekannten Methoden um die folgenden:
• toString: gibt einen String zur¨uck, der den gesamten Inhalt der Liste enth¨alt.
• add(int index, int element): f¨ugt das Element element an der Stelle index in die Liste ein.
Uberlegen Sie, was zu tun ist, wenn der index nicht passt.¨
• get(int index): gibt das Element (d.h.int-Wert) an der Stelle index zur¨uck. ¨Uberlegen Sie, was zu tun ist, wenn der index nicht passt.
• toArray: liefert die LinkedList als Array vonint-Werten zur¨uck.
• cloneDeep: macht eine tiefe (!) Kopie der aktuellen Liste und gibt diese zur¨uck.
• addAll(LinkedList otherList): f¨ugt alle Elemente der ¨ubergebenen Liste (otherList) zu der aktuellen Liste hinzu (kann (mit Vorsicht angewandt) zur Implementierung vonconcatverwendet werden).
• concat(LinkedList otherList): konkateniert die aktuelle Liste mitotherList, indem die Listen jeweils tief kopiert werden. Als Ergebnis wird die konkatenierte Liste zur¨uckgegeben.
(b) Implementieren Sie in der KlasseLinkedList alle Methoden unter Zuhilfenahme der KlasseListNode f¨ur die Knoten der Linearen Liste.
public class ListNode { private int value;
private ListNode next;
public int getValue() { return value;
}
public void setValue(int value) { this.value = value;
}
public ListNode getNext() { return next;
}
public void setNext(ListNode next) { this.next = next;
} }
Sie k¨onnen f¨ur Ihr Programm die KlassenListNodeundMenuverwenden, die Sie ¨uber die Vorlesungs- seite im Wikiformia herunterladen k¨onnen.
Bez¨uglich der Namen bzw. der konkreten Auspr¨agung der Typen im m¨ussen Sie ggf. noch Anpassungen in Ihrem Programm vornehmen.
Schreiben Sie ein Hauptprogramm, in welchem 3 Listenobjekte vereinbart sind. In einer (großen) Schleife sollen dann, in Abh¨angigkeit von Benutzereingaben, die verschiedenen Operationen aufgerufen werden.
1
Sie finden auf dem zip-file alle notwendigen Klassen bzw. das Interface.
Die zu implementierenden Methoden (bei einigen Methoden sind bespielhaft R¨uckgabetypen angegeben):
addFirst (int val) addLast (int val) int removeFirst () int removeLast () int getFirst () int getLast () boolean isEmpty ()
LinkedList empty () // Achtung --> static Methode (Klasse) boolean contains (int val)
LinkedList clear () int size()
LinkedList clone () delete (int) String toString () add(int index, int val) int get(int index) int [] toArray () LinkedList cloneDeep () addAll(LinkedList otherList) concat(LinkedList otherList)
Bei den Methoden, bei denen kein R¨uckgabetyp angegeben ist, m¨ussen Sie sich einen sinnvollen ¨uberlegen.
Denken Sie an Kommentare (in Englisch)!
Aufgabe 2: ADT Queue - Programmieraufgabe - 30 Punkte
Definieren Sie ein InterfaceQueue, welches die Funktionalit¨at des ADT Queue, wie in der Vorlesung vorge- stellt, bereitstellt.
Geben Sie eine Implementierung f¨ur das InterfaceQueue mit Hilfe des ADTLinkedList an, mit welchem sie Elemente vom Typint(wie in Aufgabe 1) verwalten k¨onnen.
Schreiben Sie ein geeignetes Hauptprogramm, mit dem Sie die Operationen der Queue flexibel testen k¨onnen, d.h. ¨uber eine geeignete Men¨usteuerung k¨onnen die Operationen der Queue aufgerufen werden.
Denken Sie an Kommentare (in Englisch)!
Aufgabe 3: Sortieren - Algorithmen - 25 Punkte
Gegeben ist die Folge 2 17 23 13 18 3 19 11 14 16 8.
Hinweis: Es sind keine Programme zu schreiben! Sie sollen vielmehr alle relevanten Zwischenschritte der Sortierverfahren geeignet notieren.
(a) Sortieren Sie die Folge mit i) dem nat¨urlichen und
ii) dem direkten Merge Sort-Algorithmus.
Notieren Sie die Folge nach jeder split- und merge-Operation.
(b) Demonstrieren Sie das Sortieren mit Quicksort (alle 3 Varianten). Protokollieren Sie Ihr Vorgehen. In diesem Protokoll muss ersichtlich sein, welches Element das Pivot Element ist (z.B. mit einem Unter- strich), und welche Zahlen getauscht wurden (z.B. mit einem Doppelpfeil), sowie jede Teilung (z.B. mit einem senkrechten Strich|).
2