Projekt - Indexliste
-
Hallo Leute,
ich steht vor einen recht großen Problem, ich bin eigentlich ein absoluter Programmier-Noob, muss aber ein recht anspruchsvolles Projekt für die Schule realisieren. Über die allgemeine Funktionsweise habe ich mich informiert, aber die programmtechnische Umsetzung fällt mir sehr schwer. Ich weiß nicht wo ich anfangen soll. Ich will auch keine fertige Lösung von irgendjemand, ich muss begreifen wie es funktioniert, da ist das Projekt auch verteidigen muss. Ich hoffe ihr könnt mir helfen.
Nun zur Aufgabe: Ich soll eine Basisklasse entwickeln, die Daten in Form einer verketteten Liste aufnehmen kann und drei Indexlisten zur Festlegung der Sortierreihenfolge. Folgende Funktionen sollen gewährleistet sein:
Verwaltung der verketteten Liste
Anfügen eines Elements an die Liste
Entfernen eines Elements aus der Liste
Indizierung aufsteigend
Indizierung absteigend
Zugriff auf die Daten über IndexlisteZur Funktionsweise habe ich mal ein Grafik entwickelt. Wie kann ich die als Thumbnail einbinden?
http://www.abload.de/image.php?img=funktionsweiseindexlisdu64.jpg
Wichtig ist, dass alles klar strukturiert ist und überall der objektorientierte Ansatz erkennbar ist.
Ich brauch erstmal einen Schlachtplan. Mit was würdet ihr anfangen? Was brauch ich an Klassen?
Danke.
-
-------------------------------------
-
Bilder kannst du nicht als thumbnails einbinden, ausgenommen Buchcover. Begründung falls du sie wissen willst findest du in der FAQ der Forentechnik.
Ich würde eine große Oberklasse machen, welche die einfach verkettete Liste und die Indexlisten enthält:
-
Du brauchst für die verkettete Liste zwei Klassen. Theoretisch könntest du auch mit einer auskommen, aber mit 2 finde ich schöner und übersichtlicher:
-
Erste Klasse: Ein Datenelement.
-
Enthält ein Datum und einen Zeiger auf das nachfolgende Datenelement (oder auf 0, falls dieses nicht existiert).
-
Stellt keine öffentlichen Methoden bereit sondern darf nur von der zweiten Klasse benutzt werden.
-
Kann als Unterklasse der zweiten Klasse implementiert werden.
-
Zweite Klasse: Die Listenklasse an sich.
-
Enthält einen Zeiger auf das erste Element (oder auf 0). Für praktische Zwecke ist es auch günstig einen Zeiger auf das letzte Element zu haben, dann gehen ein paar Sachen besser und flotter.
-
Diese Klasse stellt das Interface zur Verfügung und kümmert sich um die Organisation der Datenelemente. Hierhin kommen Methoden zum Anhängen und Entfernen.
-
Ein Destruktor, Kopierkonstruktor und Zuweisungsoperator werden auch notwendig sein.
-
Eine Iteratorklasse wäre nicht verkehrt.
-
Zu den Indexlisten: Nimm einfach deine einfach verkettete Liste als Typ. Vorausgesetzt natürlich, dass Durchiterieren ausreichend zum Zugriff ist.
-
Die Oberklasse enthält dann wiederum Methoden zum Einfügen und Entfernen. Diese rufen die Methode der verketteten Liste auf und aktualisieren den Index.
-
Zugriff erfolgt, indem Iteratoren aus den Indexlisten zurückgegeben werden
Ich glaube, so habe ich alle Anforderungen abgedeckt. Hab ich was vergessen?
-
-
..................................
-
Ein Zeiger gilt in Informatikersprache als Attribut.
Bei deinem Klassendiagramm wundert mich folgendes:
1. Die Zeigertypen. Die sind nicht vom Typ double, sondern vom Typ Zeiger auf den Datentyp (meinetwegen double. Aber dann Zeiger auf double).
2. Der Zeiger auf NULL. Du brauchst keinen Zeiger auf NULL in dem Objekt speichern. Wenn dein Zeiger auf das nächste Element den Wert NULL hat, dann gibt es kein nächste Element.
3. Die Basisklasse ist etwas komisch bezeichnet. Mit Basisklasse meint man im allgemeinen etwas anderes. Die Basisklasse sollte auch Methoden zum Verwalten und Zugriff auf die Elemente anbieten. Diese benutzen dann intern die Methoden der verketteten Liste (und sorgen zudem auch noch für Korrektheit der Indexlisten).
-
...........................
-
............................
-
Nach den Datenattributen!? Warum ist eine alphabetische Sortierung nicht sinnvoll?
-
,,,,,,,,,,,,,,,,,,,,,,,,,,
-
std::sort bzw std::stable_sort (Am besten siehst du im Internet nach, worin der Unterschied liegt), bzw zum Vergleichen zweier strings std::lessstd::string (alphabetisch) bzw std::greaterstd::string (anti-alphabetisch [Ist das überhaupt ein Wort? Wie nennt man das richtig?])

-
.........................
-
.............................