Aufgabenblatt 4 Einführung in die Programmierung II (SS 16) Institut: HS Schmalkalden Dozent: Prof. Dr. Christian Forler Url: https://studip.fh-schmalkalden.de Email: c.forler(at)hs-sm.de Aufgabe 1 (4 Punkte) Warteschlange Im folgenden wollen wir eine Warteschlange Queue von Numbers implementieren. Eine Warteschlangen arbeitet nach dem First In - First Out-Prinzip (FIFO) und dient als temporärer Zwischenspeicher. Weitere Informationen zu Warteschlangen finden Sie unter https://de.wikipedia.org/wiki/Warteschlange_ (Datenstruktur). Implementieren Sie zunächst die Klasse Element. Element -n : Number -next : Element +Element(n : Number) +getNumber() : Number +getNext() : Element +setNext(Element : next) : void Implementieren Sie anschließend die Klasse Queue mit den folgenden Attributen und Methoden. • private Element start: Der Anfang der Warteschlange • private Element end: Das Ende der Warteschlange • public boolean isEmpty() Gibt true zurück falls die Warteschlange leer ist, ansonsten false. • public void add(Number n) Fügt ein Element an das Ende der Warteschlange • public Number remove() Entfernt das Element am Anfang der Warteschlange • public double getSum() Berechnet die Summe aller Elemente. • public double getProduct() Berechnet das Produkt aller Elemente. Testen Sie ihre Implementierung ausgiebig und schreiben Sie eine kleine Demoanwendung. 1 Aufgabe 2 (4 Punkte) Binärbaum Im folgenden wollen wir einen sortieren Binärbaum (BinaryTree) welcher Zahlen speichert Numbers implementieren und Ausgeben. Bei einem Binärbaum handelt es sich um einen Baum bei dem jeder Knoten höchstens zwei Kinder (left, right) hat. Weitere Informationen zu Binärbäumen finden Sie unter https://de.wikipedia.org/wiki/Bin%C3%A4rbaum. BinaryTree -root: Node +BinaryTree(root : Node) +boolean isEmpty() : boolean +add(n :Number) : void +hasNumber(n : Number) : boolean +printInOrder() : void +printPreOrder() : void +printPostOrder() : void Node -n : Number -left : Node -right : Node +Node(n : Number) +Getter() +Setter() • public void add(Number n) Einfügen einer Number in den Binärbaum. Ist n kleiner als die Wurzel wird der neue Knoten im linken Teilbaum hinzugefügt, ansonsten im rechten Teilbaum. Ist die Wurzel des Teilbaums kleiner als n wird der neue Knoten im linken Teilbaum hinzugefügt, ansonsten im rechten Teilbaum. Der Vorgang wird solange wiederholt bis das Ende des Baums (Blattknoten) erreicht wurde. • public void printInOrder() Zuerst wird rekursive der linke Teilbaum ausgegeben, dann der Wurzelknoten und schließlich wird der rechte Teilbaum rekursiv ausgegeben. • public void printPreOrder() Zuerst wird der Wurzelknoten ausgegeben, dann wird der linke Teilbaum rekursiv ausgegeben und schließlich wird der rechte Teilbaum. • public void printPostOrder() Zuerst wird Wurzel Zuerst wird der rechte Teilbaum rekursive ausgegeben, dann der linke Teilbaum und am Ende wird der Wurzelknoten ausgegeben. Schreiben Sie eine Testanwendung, die einen Binärbaum mit der Wurzel 7 anlegt. Fügen Sie anschließend die folgenden Zahlen hinzu: 3.14, 5, 22.99, 1, 35, 14, 4, 2, 33, 44. Travesieren Sie den Baum anschließend pre-order, in-order und post-order. 2