Einfach verkettete Listen (OOP) Inhaltsverzeichnis init(): Listen, Elemente und Zeiger inc(): Anfügen des ersten Listenelementes inc(): Einfügen neuer Listenelemente prev(): Bestimmen des Vorgängerelementes Fehler: Versehentliches Ausketten eras(): Löschen des aktuellen Listenelementes Eine einfache Aufgabe
Einfach verkettete Listen (OOP) Listen, Elemente und Zeiger aktuell #include <iostream.h> class elem { private: int id; public: elem *next; elem(){ id=0;next=NULL; } } *anker, *aktuell; void init() { anker = aktuell = NULL; } int main() { return 0; #include <iostream.h> class elem { private: int id; public: elem *next; elem() { id=0; next=NULL; } elem(int idi) { id = idi; next = NULL; } } *anker, *aktuell; void init() { anker = aktuell = NULL; } int main() { init(); // Leere Liste anker= aktuell= new elem; // anker->next = NULL; return 0; // Erstes Element #include <iostream.h> class elem { private: int id; public: elem *next; elem(){ id=0;next=NULL; } } *anker, *aktuell; void init() { anker = aktuell = NULL; } int main() { init(); // Leere Liste return 0; anker NULL Liste mit einem Element Keine Liste Leere Liste next NULL
Einfach verkettete Listen (OOP) Anfügen des 1. Elementes anker aktuell void inc(int idi, string namei) { schueler *hilf = new schueler; hilf->id = idi; hilf->name = namei; } int main() { init(); inc( 1 ,“Peter“ ); return 0; void inc(int idi) { elem *hilf = new elem(idi); if(!aktuell) { hilf->next = anker; anker = hilf; } aktuell = hilf; int main() { init(); // Leere Liste inc(1); // Erstes Element return 0; NULL hilf 1 NULL
Einfach verkettete Listen (OOP) Einfügen neuer Elemente void inc(int idi) { elem *hilf = new elem(idi); if(aktuell) { hilf->next = aktuell->next; aktuell->next = hilf; } else { hilf->next = anker; anker = hilf; aktuell = hilf; int main() { init(); // Leere Liste inc(1); // Erstes Element inc(2); // Zweites Element return 0; anker aktuell 1 hilf 2 NULL 2 NULL NULL
Einfach verkettete Listen (OOP) void inc(int idi) { elem *hilf = new elem(idi); if(aktuell) { hilf->next = aktuell->next; aktuell->next = hilf; } else { hilf->next = anker; anker = hilf; aktuell = hilf; aktuell->id = idi; aktuell->name = namei; int main() { init(); // Leere Liste inc(1); // Erstes Element inc(2); // Zweites Element aktuell = anker; inc(3); // Drittes Element return 0; anker aktuell 1 hilf 3 2 3 NULL 2 NULL 2 NULL NULL
Einfach verkettete Listen (OOP) Bestimmen des Vorgängerelementes elem* prev() { elem *hilf; if( (!aktuell) || (aktuell = = anker) ) return 0; else { hilf = anker; while( hilf && (hilf->next != aktuell) ) hilf = hilf->next; return hilf; } int main() { init(); // Leere Liste inc(1); inc(2); // Element 1 und 2 aktuell = anker; inc(3); // Element 3 aktuell = prev(); // Vorgängerelement return 0; // wird das aktuelle aktuell anker hilf NULL 1 3 2 NULL
Einfach verkettete Listen (OOP) Fehler: Versehentliches Ausketten int main() { init(); // Leere Liste inc(1); inc(2); // Element 1 und 2 aktuell = anker; inc(3); // Element 3 aktuell = last(); // Vorgängerelement aktuell->next = NULL; // !!! Fehler !!! return 0; } aktuell anker hilf NULL 1 3 NULL 2 NULL 2 NULL
Einfach verkettete Listen (OOP) Löschen des aktuellen Elementes bool eras() { if(!aktuell) return false; if (aktuell==anker) anker = aktuell->next; else prev()->next = aktuell->next; delete aktuell; aktuell=anker; } int main() { init(); // Leere Liste inc(1);inc(2);inc(3); // Elemente 1,2,3 aktuell = anker->next; // aktu auf Element 2 eras(); // Löschen Element 2 return 0; aktuell anker prev() 1 2 3 NULL 3 2 NULL
Einfach verkettete Listen (OOP) Eine einfache Aufgabe An einer FH bestehen für die Zulassung zum Studium für einige Fach-richtungen nur begrenzt viele Studienplätze zur Verfügung. Deshalb werden die Bewerber in Wartelisten gespeichert, in denen vom Bewerber der Name und die Abiturnote (1.0, …, 5.0) gespeichert sind. Für jede Fachrichtung wird eine gesonderte, nach der Abiturnote aufsteigend geordnete Liste dynamisch aufgebaut. Es soll eine OOP-Lösung mit Hilfe einfach verketteter Listen geschaffen werden, die folgende Funktionen realisieren kann: 1. Erstellen einer neuen Bewerberliste für eine bestimmte Fachrichtung 2. Eingeben und speichern der Daten eines Bewerbers 3. Entfernen der Daten eines Bewerbes 4. Auslisten aller Bewerber einer Fachrichtung sortiert nach Abiturnote 5. Eingabe einer maximalen Bewerberzahl x und einer Fachrichtungs- nummer und Auslisten aller zugelassenen x Bewerber. 6. Aufruf der Funktionen durch den Nutzer aus einem Startmenü, das nach dem Programmstart automatisch auf dem Bildschirm erscheint.