Stack und Queue



  • Hi

    Ich hab die Aufgabe bekommen ein Referat über Stack und Queue zu machen. Ich hab mir die Sachen bei Wikipedia angeguckt und mir eine Power Point Präsi von einem anderen. Ich hab ein paar Sachen verstanden aber noch nicht genug um selber ein Programm mit Stack zu schreiben. Deswegen wollte ich fragen ob mir jemand ein ganz simples Programm geben könnte wo man sehen kann was ein Stack überhaupt ist und wie er funktioniert

    MfG

    DòÓm



  • DòÓm schrieb:

    Deswegen wollte ich fragen ob mir jemand ein ganz simples Programm geben könnte wo man sehen kann was ein Stack überhaupt ist und wie er funktioniert

    // stack speicher
    char stack[256];
    // stack pointer
    char *stackptr = stack;
    
    // einen wert auf den stack tun
    int push (char a)
    {
        // stack voll? dann -1 zurückgeben
        if (stackptr == stack+sizeof(stack))
            return -1;
        // wert auf den stack tun...
        *stackptr++ = a;
        // und 1 (hat geklappt) zurückgeben 
        return 1;
    }
    
    // einen wert von stack holen
    int pop (void)
    {
        // stack leer? dann -1 zurückgeben
        if (stackptr == stack)
            return -1;
        // ansonsten wert vom stack holen und zurückgeben 
        return *--stackptr;
    }
    

    🙂



  • danke





  • Erhard Henkes schrieb:

    Damit sieht man sehr schön, wie der Stack arbeitet.

    http://www.cosc.canterbury.ac.nz/people/mukundan/dsal/StackAppl.html
    🙂



  • Schöne Animation.



  • vista schrieb:

    DòÓm schrieb:

    Deswegen wollte ich fragen ob mir jemand ein ganz simples Programm geben könnte wo man sehen kann was ein Stack überhaupt ist und wie er funktioniert

    // stack speicher
    char stack[256];
    // stack pointer
    char *stackptr = stack;
    
    // einen wert auf den stack tun
    int push (char a)
    {
        // stack voll? dann -1 zurückgeben
        if (stackptr == stack+sizeof(stack))
            return -1;
        // wert auf den stack tun...
        *stackptr++ = a;
        // und 1 (hat geklappt) zurückgeben 
        return 1;
    }
    
    // einen wert von stack holen
    int pop (void)
    {
        // stack leer? dann -1 zurückgeben
        if (stackptr == stack)
            return -1;
        // ansonsten wert vom stack holen und zurückgeben 
        return *--stackptr;
    }
    

    🙂

    Hi

    Ich hab noch mal eine frage. Irendwie krieg ich das jetzt nicht hin damit ein Hauptprogramm zu schreiben. Also sowas wo ich eingegben kann was auf den stack gelegt werden soll und ob da was gelöscht werden kann. Kannst du mir da vllt. wieder helfen?



  • #include <cassert>
    #include <iostream>
    #include <string>       // std:string
    
    class Stack
    {
    public:
        typedef int value_type;
        static unsigned const max_size = 200;
    
        Stack() : m_cur( 0 ) {}
        void push( const value_type& x )
        {
            assert( m_cur < max_size );
            m_data[ m_cur++ ] = x;
        }
        value_type& top()
        {
            assert( m_cur > 0 );
            return m_data[ m_cur-1 ];
        }
        void pop()
        {
            assert( m_cur > 0 );
            --m_cur;
        }
        bool empty() const { return m_cur == 0; }
    
    private:
        value_type m_data[max_size];
        unsigned m_cur;
    };
    
    int main()
    {
        using namespace std;
        Stack s;
        cout << "Geben sie 'push <int>' oder 'pop' ein; Ende mit x" << endl;
        for( string in; cout << "> ", cin >> in && in != "x"; cin.clear(), cin.ignore( 999, '\n' ) )
        {
            int z;
            if( in == "pop" && !s.empty() )
            {
                s.pop();
            }
            else if( in == "push" && cin >> z )
            {
                s.push( z );
            }
            else
            {
                cout << "?" << endl;
                continue;
            }
            if( s.empty() )
                cout << "Stack ist leer " << endl;
            else
                cout << "oberstes Element auf dem Stack ist " << s.top() << endl;
        }
        return 0;
    }
    

    Gruß
    Werner



  • DòÓm schrieb:

    Ich hab noch mal eine frage. Irendwie krieg ich das jetzt nicht hin damit ein Hauptprogramm zu schreiben. Also sowas wo ich eingegben kann was auf den stack gelegt werden soll und ob da was gelöscht werden kann. Kannst du mir da vllt. wieder helfen?

    #include <stdio.h>
    
    int main() 
    {
        char txt[256], *p=txt;
        int c;
    
        printf ("gib deinen namen ein:");
        scanf ("%s", txt);
        printf ("hallo, ");
    
        // text auf den stack...
        while (*p) push (*p++);
        // ...und alles wieder vom stack holen und ausgeben
        while ((c = pop()) > 0) putchar (c);
    }
    

    🙂


Log in to reply