FKt die,die zahlen rückwärts ausgibt "verkettete listen"



  • Hallo alle zusammen :
    ich habe eine kleine Probelem und zwar dass ich ein Programm schreiben sollte der die zahlen rückwärt ausgibt :
    ich habe versucht diese Programm aber es funktioniert es nicht und er meldet eine Fehler nur beim Ausfüheren : 
     void ausgabe_rueckw(listenelement *kopf)
    {
    		if (kopf==NULL) cout<<"liste leer"<<endl;
    		else ausgabe_rueckw(kopf->naechste);
    }
    zweiten Problem ein Prog zu schreiben der die Zahlen vorwärts ausgibt ich habe so versucht :
    
    void ausgabe_vorw(listenelement *kopf) {
    	//Hier implemetieren der Funktion ausgabe_vorw
    	if (kopf==NULL)
    		cout << "Die liste ist leer " << endl;
    	while (kopf!=NULL)
    		cout <<" " << kopf->inhalt <<" "<<  endl;
    		kopf=kopf->naechste;// oder ausgabe_vorw(kopf->naechste)
    
    	// Ende Implementierung der Funktion ausgabe_vorw
    }
    


  • Hallo,
    was für einen Fehler bringt er in der ersten Variante. ich denke da fehlt nur die Ausgabe

    void ausgabe_rueckw(listenelement *kopf)
    {
      if (kopf==NULL) {
        cout<<"listenende"<<endl;
        return;
      }
      ausgabe_rueckw(kopf->naechste);
      cout<<kops->inhalt<<endl;
      return;
    }
    

    Und beim vorwärts ausgeben machst du die ausgabe vor dem rekursiven aufruf

    void ausgabe_rueckw(listenelement *kopf)
    {
      if (kopf==NULL) {
        cout<<"listenende"<<endl;
        return;
      }
      cout<<kops->inhalt<<endl;
      ausgabe_rueckw(kopf->naechste);
      return;
    }
    


  • hallo beim void ist keine ausgebe zu erwarten oder 🙄



  • Könntest Du irgendwie verdeutlichen, was für ein Problem überhaupt besteht? Das wird nämlich nicht so deutlich.

    Bei dem zweiten Programm wird sich der Computer in einer Endlosschleife aufhängen und die ganze Zeit den selben Inhalt ausgeben, wenn kopf != NULL ist. Da fehlen wahrscheinlich die Klammern bei der while-Schleife.

    Bei der ersten Funktion wird ja nie etwas ausgegeben, es sei denn, dass kopf == NULL ist. Das ist ja sicher nicht beabsichtigt.

    Wie ist listenelement eigentlich bei Dir implementiert? In beiden Fällen - sowohl bei Ausgabe in richtiger Richtung als auch andersherum - wird immer kopf->naechste verwendet. Das erscheint mir irgendwie unlogisch.



  • struct listenelement {
    int inhalt;
    listenelement *naechste;
    };



  • es ist alle okay nur bei der andere FKt ist mir nicht ganz klar wie soll ich das ambesten machen
    danke



  • kannst du nochmal sagen wo das problem ist? Was ist die andere FKt? was ist die eine?



  • void ausgabe_rueckw(listenelement *kopf)
    {
    if (kopf==NULL) cout<<"liste leer"<<endl;
    else ausgabe_rueckw(kopf->naechste);
    }

    diese FKT sollte die Zahlen rückwärtes zurückgeben ZB 7,6,5,4,3,2,1



  • Du könntest z.B. in Deiner Struktur noch einen Zeiger auf das vorherige Element einbauen (doppelt-verkettete Liste) und dann die Funktion so umschreiben, dass ihr das letzte Listenelement übergeben wird und sie die Liste dann rückwärts bis zum Listenanfang durchläuft.

    Oder darfst Du keine doppelt-verkettete Liste benutzen?



  • In der Funktion gibst du offensichtlich nie den inhalt aus. was spricht gegen die variante die ich oben gepostet habe, bis auf die tatsache das ich kops anstelle fon kopf geschrieben habe?



  • gegen dein Program ist echt alles in Ordnung und es funktioniert wunderbar
    danke
    aber noch ein Frage bei Void FKT dachte ich immer es immer keine Return anweisung



  • Doch auch bei void funktionen gibt es ein return. das heist einfach nur das er aus der funktion wieder in die rufende funktion zurück geht, dabei wird einfach kein wert zurückgegeben.


Log in to reply