IntStack Hilfe
-
Da in einer Stunde mein Internet bis am Abend abgedreht wird brauch ich eure Hilfe:
bool IntStack::top(int * value) const; bool IntStack::top(int & value) const;
Das soll dem Benutzer ersparen vor jedem Aufruf der Methode top die Methode isEmpty() aufrufen zu müssen. Wenn mindestens ein Element am Stack liegt, sollen die Methoden den Wert des obersten Elements über den Parameter value zurückgeben. und wenn der Stack aber leer ist , soll value unverändert bleiben und die Methode false zurückliefern.
Hier ist einmal mein Code bisher. Ich denke schon dass dieser Code passt.
class Element { public: int value; Element* next; } ; class IntStack { Element* head; public: Int Stack() ; ~IntStack() ; IntStack(const IntStack&) ; IntStack& operator=(const IntStack&) ; bool push(int) ; in top() const; void pop() ; inline bool isEmpty() const; } ; IntStack::IntStack() : head(0) {} IntStack::~IntStack() { Element * help; while (head) { help=head; head=head->next; delete help; } } IntStack::IntStack(const IntStack& orig) { if (!orig.head) { head=0; } else { Element * helpOrig = orig.head; Element * helpNew = new Element; assert(helpNew) ; head = helpNew; head = helpNew; helpNew->value = helpOrig->value; while (helpOrig->next) { helpNew->next = new Element; asser(helpNew->next) ; helpNew = helpNew->next; helpOrig = helpOrig->next; helpNew->value = helpOrig->value; } helpNew->next = 0; } } IntStack& IntStack::operator=(const IntStack& rS) { if (!rS.head) { Element * help; while (head) { help=head; head=head->next; delete help; } } else { Element * helpRS = rS.head; if (!head) {head new Element; assert(head) ; head->next = 0; } Element * helpLS = head; helpLS->value = helpRS->value; while (helpRS->next) { if(!helpLS->nex) { helpLS->next = new Element; asser(helpLSw->next) ; helpLS->next->next = 0; } helpLS = helpLS->next; helpRS = helpRS->next; helpLS->value = helpRS->value; } Element * help; while (helpLS->nex) { help=helpLS->next; helpLS->next=helpLS->nex->next; delete help; } } return *this; } bool IntStack::push(int a) { Element * help = new Element; if (!help) return false; help->next = head; help->value = a; head = help; return true; ] int IntStack::top() const { return (head ? head->value : -1) ; } void IntStack::pop () { if (head) { Element * help = head; head = head->next; delete healp; } } inline bool IntStack::isEmpty() const { return head == 0 ; }
-
Und die Frage lautet nochmal wie genau?
-
...und was spricht gegen std::stack<int> ?
Gruß,
Simon2.