Aufgabenblatt 9

Werbung
Algorithmik I, WS 2005/06
Carsten Dachsbacher, [email protected]
Aufgabenblatt 9
Abgabe: 23. Dezember 2005, 20:00
Aufgabe 9.1:
ADT Keller
[20 Praxis-Punkte]
Implementieren Sie, ohne auf in Java standardmässig vorhandene Klassen zurückzugreifen, den abstrakten Datentyp Keller wie Sie ihn in der Vorlesung kennengelernt haben. Gegeben ist dazu die
folgende Signatur eines Kellers aus Java Objekten (Object):
create:
add:
pop:
top:
empty:
Object x Keller
Keller
Keller
Keller
→
→
→
→
→
Keller
Keller
Keller
Object
boolean
Formulieren Sie ein entsprechendes objekt-orientiertes Java Interface Keller, wobei ’create’ durch
den Konstruktor der Klasse ersetzt wird, die das Interface implementiert.
Implementieren Sie dann Ihr Keller Interface mit einer public Klasse KellerImplementierung und
testen Sie Ihre Implementierung mit einer public Klasse KellerTest. Verwenden Sie dazu eine Instanz der Klasse KellerImplementierung auf die Sie mittels einer Referenzvariable des Typs Klasse
zugreifen. Die Größe des Kellers beschränken Sie in Ihrer Implementation auf 256 Elemente.
Geben Sie folgende Dateien ab:
• Keller.java
• KellerImplementierung.java
• KellerTest.java
Aufgabe 9.2:
Fingerübung: Verkettete Listen
[40 Praxis-Punkte]
Ziel dieser Aufgabe ist es, den Umgang mit verketteten Listen zu üben. Implementieren Sie das folgende Interface einer einfach verketteten, sortierten Liste (public class SortedListImplementierung):
1
2
3
4
5
6
7
8
9
10
public interface SortedList {
public void
add( Comparable o );
public void
add( SortedList l );
public void
remove( Comparable o );
public Comparable getFirst();
public Comparable getNext( Comparable o );
public Comparable getPrevious( Comparable o );
public void
shuffle();
public boolean
empty();
}//interface SortedList
Um die Elemente der verketteten Liste zu repräsentieren, verwenden Sie folgende Klasse:
1
2
3
4
class ListNode {
public Comparable
public ListNode
}
c;
next;
// Referenz auf ein Listenelement
// Nächster Knoten der verketteten Liste
Seite 1 von 2
Algorithmik I, WS 2005/06
Carsten Dachsbacher, [email protected]
• Die Elemente der Liste implementieren das Comparable Interface, d.h. sie besitzen eine compareTo
Methode, die eine Ordnung der Listen-Elemente erlaubt. Implementieren Sie die verkettete Liste so, dass die Elemente, die mit der add Methode eingefügt werden, aufsteigend sortiert sind.
Alle Operationen der Liste arbeiten mit den Referenzen auf die übergebenen Comparable.
• Die remove Methode entfernt ein Element der Liste - implementieren Sie so, dass nur eine Membervariable next geändert werden muss, um ein Element zu entfernen.
• Die Methode getFirst liefert den Kopf der verketteten Liste, getNext bzw. getPrevious jeweils das nächste bzw. vorherige Element. Existitert das entsprechende Element nicht, ist der
Rückgabewert null.
• Überlegen Sie sich eine Möglichkeit, die verhindert, dass bei getNext die Liste vom Listenkopf
an durchsucht wird, bis das gesuchte Element gefunden wird und der Nachfolger zurückgegeben
werden kann. Implementieren Sie die Klasse entsprechend!
• Implementieren Sie eine Methode shuffle, die eine Liste analog zu den folgenden Beispielen
umordnet und implementieren Sie die Methode so, dass Sie nur die Referenzen auf den jeweils
nächsten Listenknoten (next) modifizieren:
(1, 2, 3, 4) −→ shu f f le −→ (1, 4, 2, 3)
(1, 2, 3, 4, 5) −→ shu f f le −→ (1, 5, 2, 4, 3)
(1, 2, 7, 14, 15, 18) −→ shu f f le −→ (1, 18, 2, 15, 7, 14)
(3, 5, 7, 8, 9, 12, 17) −→ shu f f le −→ (3, 17, 5, 12, 7, 9, 8)
Wenn Sie Java 1.5 verwenden können Warnmeldungen beim Übersetzen auftreten, die Sie aber ignorieren können!
Geben Sie folgende Datei ab:
• SortedListImplementierung.java
Aufgabe 9.3:
ADT Mengen
[30 Theorie-Punkte]
Geben Sie die Signatur und die Axiome einer Menge an. Eine Menge kann leer sein oder ein oder
mehrere Elemente T enthalten, wobei jedes Element nur einmal in der Menge vorkommen kann. Für
die Elemente T existiert ein Gleichheitsoperator.
Folgende Operationen sollen auf einer Menge möglich sein:
• Leere Menge erzeugen: create
• Element hinzufügen: add
• Überprüfen ob ein Element in der Menge vorhanden ist: isIn
• Element aus der Menge entfernen: del
• Überprüfen ob die Menge leer ist: empty
• Erzeugen einer ein-elementigen Menge: single
• Die Schnittmenge zweier Mengen bilden: intersect
• Die Vereinigung zweier Mengen: union
Seite 2 von 2
Herunterladen