Aufgabe: zu Lifo -Stack



  • Was bitte bedeutet buttom?

    Du meinst wohl bottom?



  • Zuweisungsoperator nicht vergessen -- das steht zwar nicht in der Aufgabenstellung, aber der Compiler-generierte Zuweisungsoperator macht hier das falsche.

    Außerdem, missbrauchst Du Vererbung.


  • Administrator

    krümelkacker schrieb:

    Außerdem, missbrauchst Du Vererbung.

    Merkt euch es mal, c.groupe ist der mit dem Professor, welcher man löschen (verbrennen) sollte 🤡

    Grüssli



  • Die Basiklasse stack ergibt überhaupt keinen Sinn.
    Lies die Geschichte des Herrn Bebel: http://www.c-plusplus.net/forum/viewtopic-var-t-is-75672.html



  • krümelkacker schrieb:

    Zuweisungsoperator nicht vergessen -- das steht zwar nicht in der Aufgabenstellung, aber der Compiler-generierte Zuweisungsoperator macht hier das falsche.

    Außerdem, missbrauchst Du Vererbung.

    ja ist nicht sauber geschrieben, kommt davon wenn man es so schnell runtertippt.
    und ja bottom, habs schon angepasst 🙂



  • Dravere schrieb:

    krümelkacker schrieb:

    Außerdem, missbrauchst Du Vererbung.

    Merkt euch es mal, c.groupe ist der mit dem Professor, welcher man löschen (verbrennen) sollte 🤡

    Grüssli

    omg, ich hab doch nur die aufgabe machen wollen 🙂



  • Dravere schrieb:

    krümelkacker schrieb:

    Außerdem, missbrauchst Du Vererbung.

    Merkt euch es mal, c.groupe ist der mit dem Professor, welcher man löschen (verbrennen) sollte 🤡

    Das soll c.groupe mal in seine Signatur aufnehmen.

    Außerdem war neulich sein Prof nur 20 Jahre hintendran, das Erben von stack war niemals vernünftig, fürchte ich.



  • gut ich schreibe mal LIFO neu und lasse es LIFO mit FIFO zu verbinden 😉



  • Alter Version: nach der Aufgabe

    /*
     * Lifo-Stack.cpp
     *
     *  Created on: 07.02.2010
     *      Author: c.goupe
     */
    
    #include <iostream>
    using namespace std;
    
    class stack{
    private:
        int anzahl;
        int size;
        int top;
        int* stck;
    
    public:
        // Konstruktoren
        stack(int groesse = 16) {
            stck = new int[groesse];
            size = groesse;
             top = 0;
        }
        stack(const stack & s) {
            anzahl = s.anzahl;
              stck = new int [anzahl];
    
            for( int i=0; i<anzahl; ++i )
                stck[i] = s.stck[i];
        }
        ~stack() { delete[] stck; }
    
        void push(int wert)    {
            if (top == size) resize(size*2);
            stck[top] = wert;
            ++top;
        }
    
        int pop() {
            int erg = 0;
            if (top > 0) {
                --top;
                erg = stck[top];
            }
            else cerr << "Fehler in pop: Stack ist leer!\n";
            return erg;
        }
    
        void resize(int newsize){
                int *Speicher, i;
                Speicher = new int [newsize];
    
                for( i=0; i<anzahl; ++i )
                    Speicher[i] = stck[i];
    
                delete [] stck;
                stck = Speicher;
                size = newsize;
            }
    };
    
    int main()
    {
            int a;
            stack s;
            cout << "LIFO-Stack!";
            cout << "Push: "; cin >> a; s.push(a);
            cout << "Pop: " << s.pop() << endl;
            return 0;
    }
    

    Neue Version:

    /*
     * Lifo-Stack(verbessert).cpp
     *
     *  Created on: 07.02.2010
     *      Author: c.groupe
     */
    
    #include <iostream>
    using namespace std;
    
    // LIFO-Stack
    
    class Stack
    {
    public:
    	Stack(int groesse = 16){
    	 itsStack 	= new int[groesse];
    	 itsSize 	= groesse;
    	 itsTop 	= 0;
    	 }
    	~Stack() { delete[] itsStack; }
    
    	void Push(int wert);
    	int Pop();
    	void Resize(int newsize);
    
    //	void setSize(  int size ) { itsSize = size; }
    //	void setTop(  int top ) { itsTop = top; }
    //	void setStack(  int* stack ) { itsStack = stack; }
    	int getSize() const { return itsSize; }
    	int getTop() const { return itsTop; }
    	int getStack() const { return* itsStack; }
    
    protected:
    	int itsSize;
    	int itsTop;
    	int* itsStack;
    };
    
    void Stack::Push(int wert) {
    	if ( getTop() == getSize() )
    		Resize(getSize()*2);
    	itsStack[getTop()] = wert;
    	++itsTop;
    }
    
    int Stack::Pop() {
    	int erg = 0;
    	if ( getTop() > 0) {
    		--itsTop;
    		erg = itsStack[getTop()];
    	}
    	else clog << "Fehler in Pop: Stack ist leer!\n";
    	return erg;
    }
    
    void Stack::Resize(int newsize) {
    	int *Speicher;
    	Speicher = new int [newsize];
    	for ( int i=0; i<getTop(); ++i)
    		Speicher[i] = itsStack[i];
    	delete [] itsStack;
    	itsStack	= Speicher;
    	itsSize		= newsize;
    }
    
    int main ()
    {
      Stack mystack;
      cout << "0. top: " <<  mystack.getTop() << endl;
    
      for (int i=0; i<20; i++) 	mystack.Push(i);
      cout << "1. top: " << mystack.getTop() << endl;
    
      for (int i=0; i<11; i++) 	mystack.Pop();
      cout << "2. top: " << mystack.getTop() << endl;
    
      mystack.Push(10);
      mystack.Push(20);
    
      cout << "mystack.getTop() is now " << mystack.getTop() << endl;
    
      return 0;
    }
    

    besser ? 🙂



  • so und hier mal ein FIFO,
    ich weiss nur nicht wie ich am bestern resize in push noch unterbringen soll.
    und mit set klappt auch nichts 😉

    /*
     * Fifo-Stack(ordentlich).cpp
     *
     *  Created on: 07.02.2010
     *      Author: c.groupe
     */
    
    #include <iostream>
    using namespace std;
    
    // FIFO-Stack
    
    class Stack
    {
    public:
    	Stack(int groesse = 3){
    	 itsStack 	= new int[groesse];
    	 itsSize 	= groesse;
    	 itsTop 	= 0;
    	 itsBottom 	= -1;
    	 }
    	~Stack() { delete[] itsStack; }
    
    	void Push(int wert);
    	int Pop();
    	void Resize(int newsize);
    
    //	void setSize(  int size ) { itsSize = size; }
    //	void setTop(  int top ) { itsTop = top; }
    //	void setStack(  int* stack ) { itsStack = stack; }
    	int getSize() const { return itsSize; }
    	int getTop() const { return itsTop; }
    	int getStack() const { return* itsStack; }
    	int getBottom() const { return itsBottom; }
    
    protected:
    	int itsSize;
    	int itsTop;
    	int itsBottom;
    	int* itsStack;
    };
    
    void Stack::Push(int wert) {
    	if ( getTop() != getBottom() ) {
    		itsStack[getTop()] = wert;
    	if ( getBottom() == -1 )
    		itsBottom = itsTop;
    	itsTop = (getTop() + 1) % getSize();
    	}
    }
    
    int Stack::Pop() {
    	int erg = -1;
    	if ( getBottom() != -1 ) {
    		erg = itsStack[getBottom()];
    		itsBottom = ( getBottom() +1 ) % getSize();
    	if ( getBottom() == getTop() )
    		itsBottom = -1;
    	}
    	else clog << "Fehler in Pop: Stack ist leer!\n";
    	return erg;
    }
    
    void Stack::Resize(int newsize) {
    	int *Speicher;
    	Speicher = new int [newsize];
    	for ( int i=0; i<getTop(); ++i)
    		Speicher[i] = itsStack[i];
    	delete [] itsStack;
    	itsStack	= Speicher;
    	itsSize		= newsize;
    }
    

Anmelden zum Antworten