Ich habe gestern angefangen aus langeweile zu programmieren.
Also fing ich mit einer Implementierung eines einfachen Stacks an. Alle Elemente des Stacks sollen Werte vom Typ
int speichern.
Es soll immer wieder ein Wert auf den Stack legen und schauen, welches Element ganz oben auf dem Stack ist. Den Speicher wieder freigeben und schauen, welches Element nun auf dem Stack liegt.
Also erstellte ich Zeiger, die auf die jeweiligen Elemente zeigen. Sobald die Funktion pumped_it_up aufgerufen wird, verändert sich der Zeiger und zeigt auf etwas anderes. Wenn man nun alle Elemente speichert, sind sie nicht mehr zugreifbar. Zunächst dachte ich, ich sei nur müde, aber auch jetzt nach einem guten Schlaf, sehe ich meinen Fehler/misslungen Gedanken nicht.
Ich habe den Fehler eingegrenzt und immer wieder sequentielle Ausgaben gemacht und es liegt an der pumped_it_up - Funtkion aber ich begreife es einfach gerade überhaupt nicht. Ich stehe total auf dem Schlauch...
Code:
#include <iostream>
using namespace std;
class Element_stack {
private:
int wert;
Element_stack* next_pls;
public:
Element_stack(int var) { wert= var; next_pls= NULL; }
Element_stack() {}
Element_stack* get_next() {
return next_pls;
}
void set_next(Element_stack* n) {
next_pls= n;
}
int get_value() {
return wert;
}
void set_value(int v) {
wert= v;
}
};
class Stack {
private:
Element_stack* head;
public:
Stack() { head = NULL; }
void top() {
if(head == NULL)
cout<<"\nStack is empty";
else
cout<<"\ntop element: "<<(*head).get_value();
}
void push(int val) {
Element_stack new_elem(val);
if(head == NULL)
head = &new_elem;
else {
new_elem.set_next(head);
head = &new_elem;
}
}
void pumped_it_up() {
if(head == NULL)
cout<<"\nStack ist leer, hier gibt es nichts zu löschen";
else {
cout<<"\nerstes Element wird gelöscht mit dem Wert: "<<(*head).get_value();
head = (*head).get_next();
}
}
};
// stack test
int main() {
Stack my_stack;
int opt=100;
int ins=0;
my_stack.push(2); my_stack.top();
my_stack.pop(); my_stack.top();
my_stack.push(3); my_stack.top();
my_stack.push(4); my_stack.top();
my_stack.push(5); my_stack.top();
my_stack.pop(); my_stack.top();
my_stack.pop(); my_stack.top();
my_stack.pop(); my_stack.top();
}