Es soll eine verkettete dynamische Liste aus aufsteigend sortierten Elementen aufgebaut werden. Jedes Listenelement enthält einen Namen und einen Zahlenwert, sortiert wird nach dem Zahlenwert. Das Hauptprogramm fragt in einer Wiederholschleife einen Namen und einen dazugehörigen Zahlenwert ab und ruft damit eine Einfuege_Routine auf, die das Element an der richtigen Stelle einkettet.. Anschließend wird eine Ausgabe_Routine aufgerufen, die die Kette traversiert und Namen und zugehörigen Zahlenwert ausgibt.
Mein Quellcode schaut mittlerweile folgendermaßen aus:
PHP-Quellcode
- #include <iostream>
- #include <string>
- using namespace std;
- struct knoten
- {
- int nr;
- string name;
- struct knoten *next;
- };
- struct knoten *anfang, *ende; // Zeiger auf Anfang und Ende der Liste
- void einfuegen (int x, string name)
- { // einfuegen am Ende der Liste
- struct knoten *p_neu = new knoten; // erzeuge neuen Knoten
- struct knoten *pre_knoten = new knoten;
- struct knoten *folg_knoten = new knoten;
- p_neu->next=NULL;
- if (anfang == NULL)
- { // Leere Liste
- p_neu->nr=x;
- p_neu->name=name;
- anfang=p_neu;
- p_neu->next=NULL;
- cout << "hallo";
- }
- else
- { // Liste nicht leer
- cout << "hello";
- p_neu=anfang;
- pre_knoten=anfang;
- while (true)
- {
- if (p_neu->next == NULL)
- {
- p_neu->nr=x;
- p_neu->name=name;
- cout << "if";
- break;
- }
- else
- {
- if (x>=p_neu->nr)
- {
- p_neu->nr=x;
- p_neu->name=name;
- pre_knoten->next=p_neu;
- break;
- }
- else
- {
- p_neu=p_neu->next;
- pre_knoten=pre_knoten->next;
- }
- }
- }
- }
- }
- void ausgeben()
- { // ausgeben von Anfang bis Ende
- struct knoten *p = anfang; // p zeigt auf aktuellen Knoten
- p=p->next;
- cout << "Liste: \n";
- while (p != NULL)
- {
- cout << p->nr << " "; // Infoteil des aktuellen Knoten ausgeben
- cout << p->name << endl;
- p = p->next; // p auf Folgeelement setzen
- }
- cout << endl;
- }
- void main()
- {
- anfang = ende = NULL; // Leere Liste
- int eingabe;
- string name;
- char dummy;
- while (true)
- {
- cout << "Integer (Abbruch mit negativem Wert): ";
- cin >> eingabe;
- if (eingabe<0)
- break; // Beende Eingabeaufforderung
- cout << "Name: ";
- cin >> name;
- einfuegen (eingabe, name);
- }
- ausgeben();
- cin >> dummy;
- }
Allerdings will das Einfügen eines neuen Knotens einfach nicht funktionieren. Der muss erzeugt und an der richtigen Stelle eingefügt werden.
Hat vielleicht jemand einen Tipp was ich ändern muss?
// hab mal das (quote) durch (php) ausgetauscht. dann ist das syntax highlighting besser [feuerstein]