Hausaufgabe Ringliste Korbinian Molitorisz IPD Tichy – Lehrstuhl für Programmiersysteme KIT – die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH) Voraussetzungen Ein Texteditor Ein C#-Übersetzer Alternative: Visual Studio Erinnerung: „Professional Edition“ aus der MSDN-AA über ELMS Info: http://www.studentprogram-south.de/cms/home/layout/39.aspx Anmeldung: http://www.studentprogram-south.de/cms/home/layout/52.aspx Login: http://msdn40.e-academy.com/micror_info/ Oder mit der kostenlosen „Express Edition“ http://msdn.microsoft.com/vstudio/express/visualcsharp/ 2 Hausaufgabe - Ringliste Aufgabe: Ringliste Eine Ringliste ist eine doppelt verkettete Liste ohne spezielles Anfangs- oder Endelement. Implementieren Sie eine Ringliste, in der man objecte abspeichern kann. obj1 obj6 Kopf obj3 obj15 obj3 3 Hausaufgabe - Ringliste obj37 Verwendung der Liste Die Verwaltung der Knoten soll komplett vor dem Benutzer der List verborgen werden, er soll noch nicht einmal merken, dass es Knoten gibt. Er instanziiert nur ein Listenobjekt und fügt Objekte ein, sucht sie und löscht sie wieder. 4 Hausaufgabe - Ringliste Spezifikation Der benötigte Speicher für die Datenstruktur darf c1 * n + c2 nicht überschreiten, wobei c1 die konstante Größe eines Knotens , n die Anzahl der Knoten und c2 die konstante Größe einer Listeninstanz ist. 5 Hausaufgabe - Ringliste Schnittstelle Ein Konstruktor zum Anlegen einer Ringliste Eine Eigenschaft uint Length, auf die nur lesend zugegriffen werden kann. Muss mit dem Aufwand O(1) geschehen. Die Methoden Prepend(object o) und Append(object o), die ein Objekt „ganz vorne“ oder „ganz hinten“ in die Liste einfügen. Muss mit dem Aufwand O(1) geschehen. Die Methode Rotate(long val), die den Anfang der Liste nach vorne oder hinten dreht. Muss in O(val) gehen. 6 Hausaufgabe - Ringliste Schnittstelle Die Methode Delete(), die das erste Listenelement löscht und so das zweite Listenelement zum ersten macht. Muss in O(1) gehen. Die Methoden SetValue(object o) und GetValue(), die den Wert des ersten Listenelements zurückgeben bzw. setzen. Muss in O(1) gehen. Einen Indizierer [int pos] für den lesenden und schreibenden Zugriff auf das pos-te Element (vom Anfang aus gesehen). Muss in O(pos) gehen. 7 Hausaufgabe - Ringliste