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.
-
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; }