Daten aus einer einfach verketteten Liste in eine andere verschieben



  • Hallo,
    ich möchte zwei einfach verkettete listen erstellen. Die eine wird mit Daten gefüllt und anschließend sollen diese Daten eins nach dem anderen in die andere Liste verschoben werden wobei sich erstere leert. Ich hab allerdings beim besten Willen keinen Schimmer wie ich das bewerkstelligen soll. Ich hab bereits 4 Funktionen erstellt mit denen man die Aufgabe bewältigen kann. Diese sieht man unten. Ist mein Lösungsansatz überhaupt richtig?

    int push(uint nr) {
    	p=new waggon;
    	if(p==NULL) {
    		cout << "stack overflow-no more memory" << endl;
    		return 1;
    	}
    	p->next=erster;
    	p->nummer=nr;
    	erster=p;
    	return 0;
    }
    
    int pop(void) {
    	if(isEmpty(erster)) return 0;
    	cout << "Waggon-Nr.: " << erster->nummer << " entnommen." << endl;
    	p=erster;
    	erster=erster->next;
    	delete (p);
    	return 1;
    }
    
    bool isEmpty(ptr pp) {
    	if(p==NULL) {
    		cout << "empty stack" << endl;
    		return true;
    	}
    	return false;
    }
    
    int peek(void) {
    	q=erster;
    	if(isEmpty(q)) return 1;
    	while(q!=NULL) {
    		cout << q->nummer << "  ";
    		q=q->next;
    	}
    	cout << endl;
    	return 0;
    }
    


  • Du hast vier Funktionen geschrieben, mit denen man die Aufgabe bewältigen kann, aber keinen Schimmer, wie das geht? Erklär mal.



  • Ich kann mit diesen 4 Funktionen nur eine Liste füllen/leeren. Ich weiß nicht wie ich mit diesen Funktionen auch eine zweite Liste füllen/leeren kann. Ich sitze da jetzt auch schon wieder seit gestern morgen dran.



  • Wenn das wirklich der Originalcode ist, dann liegt das an der Verwendung globaler Variablen zusammen mit freien Funktionen. Implementiere die Liste als Klasse.



  • Und im Internet findet man auch nur Beispiele von verketteten Listen die nicht weiter gehen als das was ich oben gepostet habe, oder jedenfalls bin ich noch nicht darauf gestoßen.



  • Wie man Klassen bearbeitet müsste ich mir erst mal aneignen. In meinem Informatikkurs hatten wir so was noch nicht



  • Du kannst den Listenkopf (=erster) auch an die Funktionen übergeben. Ist dann halt C.



  • da muss ich jetzt erst mal überlegen ^^



  • int push(uint nr, ptr gleis) { 
         p=new waggon; 
         if(p==NULL) { 
             cout << "stack overflow-no more memory" << endl; 
             return 1; 
         } 
         p->next=erster; 
         p->nummer=nr; 
         gleis=p; 
         return 0; 
    }
    

    so sehen die Funktionen jetzt aus. Wenn ich allerdings im Hauptprogramm die Struktur Gleis1 als Parameter nehme wird mir gesagt dass zu viele Argumente in der Funktion benutzt werden.



  • Warum meinen eigentlich alle Anfänger, sie müssten die Fehlermeldung umschreiben, statt sie zu kopieren?

    Vermutlich hast du die Funktionsdeklaration nicht angepasst.

    Wenn du einen übergeben Parameter ändern willst, benötigst du call bei reference, nicht call by value. Das gilt auch für Pointer!

    int push(uint nr, ptr& gleis)
    

    Dabei musst du natürlich eine Pointervariable benutzen, nicht die Adresse einer Struktur.

    - in deiner Funktion wird immer noch erster benutzt
    - new wirft bei Speichermangel eine Exception, der NULL-Test ist überflüssig



  • p gibt es auch nicht in der Funktion!


Log in to reply