Liste mit lokalen Stacks



  • Hallo Community!

    Und wieder einmal habe ich eine Frage an euch. 😉

    Bei folgendem Listing wird eine Liste erzeugt und die Daten werden "umgekehrt" (Stack) wieder ausgegeben. Es gibt auch lokale Stacks darin, doch irgendwie verstehe ich den Sinn der ganzen Sache nicht wirklich. Sind die lokalen Stacks, damit auch nur einzelne Teile der Liste ausgegeben werden können? Und warum stehen beim Parameter "TListenKnoten **Anker" zwei Sterne vor "Anker"?

    #include <iostream>
    using namespace std;
    
    // Listenelement: Daten und ein Zeiger zum Nachfolger
    struct tListenKnoten
    {
        int data;
        tListenKnoten *next;
    };
    
    // Schiebe ein Element auf den Stack-Anker
    void push(tListenKnoten **Anker, int data)
    {
        tListenKnoten *node = new tListenKnoten;
        node->data = data;
        node->next = *Anker; // Vorn einhängen
        *Anker = node;       // Als erstes Element setzen
    }
    
    // Ziehe ein Element vom Stack-Anker
    int pop(tListenKnoten **Anker)
    {
        int inhalt=0;
        if (*Anker) // gibt es überhaupt Elemente?
        {
            tListenKnoten *old = *Anker; // Element sichern
            *Anker = (*Anker)->next; // Zweites Element wird Anker
            inhalt = old->data; // Daten übernehmen
            delete old; // Gesichertes Element kann gelöscht werden
        }
        return inhalt;
    }
    
    int main() // Testprogramm
    {
        tListenKnoten *Anker = 0;  // lege einen Stack an
        push(&Anker, 2); // Elemente draufschieben
        push(&Anker, 5);
        push(&Anker, 18);
        cout << pop(&Anker) << endl; // Nacheinander abziehen
        cout << pop(&Anker) << endl;
        cout << pop(&Anker) << endl;
    }
    

    Vielen Dank schonmal für eure Hilfe!



  • 😕 Was sollen da "lokale Stacks" sein?



  • [url=http://c-plusplus.net/forum/viewtopic-var-t-is-254043.html]Ohje,

    das wird nichts, wenn du dich mit Listen beschäftigen willst, musst du wissen was "Zeiger" ( Deswegen die Sternchen ) sind ( Auch gennant als Pointers ).[/url]



  • @müü: Mit "lokalen Stacks" ist anscheinend gemeint, dass die Anker übergeben werden können.

    @OhNein: Natürlich weiss ich was Zeiger sind. 😉
    Momentan ist es mir aber noch ein Rätsel, warum es zwei Sterne braucht. Zeiger werden ja normalerweise mit nur einem Stern definiert.

    EDIT: Ich glaube ich habe es jetzt selber herausgefunden. Ist das, weil sozusagen eine Adresse auf einen Zeiger übergeben wird? Werden deshalb die beiden Sterne benötigt?



  • Miness schrieb:

    @müü: Mit "lokalen Stacks" ist anscheinend gemeint, dass die Anker übergeben werden können.

    @OhNein: Natürlich weiss ich was Zeiger sind. 😉
    Momentan ist es mir aber noch ein Rätsel, warum es zwei Sterne braucht. Zeiger werden ja normalerweise mit nur einem Stern definiert.

    EDIT: Ich glaube ich habe es jetzt selber herausgefunden. Ist das, weil sozusagen eine Adresse auf einen Zeiger übergeben wird? Werden deshalb die beiden Sterne benötigt?

    Ja, aber so ein Zeiger ist ja im Prinzip auch nur eine 32-Bit-Zahl, die eine Adresse bedeutet. Nun kann man auch noch einen Zeiger auf so eine Zeigervariable machen, das ist dann Punkt7 von dem Link.
    Edit: Ja, ganz genau.


Anmelden zum Antworten