Stack Implementation
-
Hallo,
es gab hier schonmal fast die gleiche Aufgabe, dabei war die Problemstellung jedoch eine völlig andere.
Die exakte Aufgabenstellung gibt es hier... http://pastebin.com/572ErrdN
Ich kann den Vorgang in der main- Funktion nachvollziehen, verstehe auch den Zweck der Aufgabe. Ich finde einfach keinen logischen Gedanken der mir zu begreifen gibt wie ich die vorgegebenen Funktionen anwenden soll. Das heißt, ich weiß wo die Funktionsköpfe hingehören, aber ich kann den Unterbau der Funktionen nicht schreiben. Bei allem was ich aus meinem Buch soweit gelernt habe, bringt mich das hier nicht weiter...
Ich weiß jetzt zwar was push und pop bewirken soll, aber nicht wie ich es anwenden soll. Die Kapitel über struct und pointer hab ich ebenfalls verstanden, auch was LIFO ist. In meinem c++ Buch konnte ich verschiedene Begriffe auch nachlesen aber es reicht einfach nicht für diese Aufgabe... ich merk wie mir hier der Unterbau fehlt. Ich wär froh ich hätte eine Lösung die ich Stück für Stück nachgehen und verstehen kann.
Google benutze ich schon seit Stunden...ich finde hin und wieder ähnliche Bruchstücke, ich konnte diesen aber nichts abgewinnen.

mfg
-
plantplant schrieb:
Ich finde einfach keinen logischen Gedanken der mir zu begreifen gibt wie ich die vorgegebenen Funktionen anwenden soll.
Du meinst, wie du die Funktionen implementieren sollst?

Das heißt, ich weiß wo die Funktionsköpfe hingehören, aber ich kann den Unterbau der Funktionen nicht schreiben.
Ich weiß jetzt zwar was push und pop bewirken soll, aber nicht wie ich es anwenden soll.
Schon wieder anwenden. Also doch kein Fehler. Was genau willst du eigentlich wissen? Ich ignoriere am besten, was du fragst und gehe davon aus, dass du einfach nur wissen willst, wie du die Aufgabe lösen sollst...
Die Kapitel über struct und pointer hab ich ebenfalls verstanden, auch was LIFO ist.
Das ist gut.
Fangen wir mal klein an. Du weißt was ein Stack macht, und du hast eine struct-Definition für deinen Stack vorgegeben. Was meinst du, ist die Bedeutung der einzelnen Datenfelder? (Tipp: Das steht in den Kommentaren.) Welchen Inhalt müssten sie haben, für einen leeren Stack? (Damit kannst du dann schon create_stack und isEmpty implementieren. BTW die Namenskonvention ist bekloppt, entweder auch is_empty oder auch createStack, aber dafür kannst du nichts.)
-
Etwas mehr wirst du wohl schon liefern müssen.
-
Ich weiß nicht wie ich
Stack *create_stack(unsigned int);
void push(Stack *, char);
char pop(Stack *);
int isEmpty(Stack *);
void destroy_stack(Stack *);
vervollständigen soll. Außerdem hab ich den Zeiger so noch nicht gesehn. Was soll Stack *create_stack(unsigned int); bedeuten? Ein Zeiger Namens create_stack zeigt auf Stack?
Wie lese ich außerdem aus der Parameterklammer (Stack *)? Also was bedeutet das?
mfg
-
plantplant schrieb:
Ich weiß nicht wie ich
Stack *create_stack(unsigned int);
void push(Stack *, char);
char pop(Stack *);
int isEmpty(Stack *);
void destroy_stack(Stack *);
vervollständigen soll.
Schon klar.
Außerdem hab ich den Zeiger so noch nicht gesehn. Was soll Stack *create_stack(unsigned int); bedeuten?
create_stack ist eine Funktion mit Rückgabetyp "Zeiger auf Stack".
Ein Zeiger Namens create_stack zeigt auf Stack?
Das wäre
Stack *create_stack;, aber da steht ja noch eine Parameterliste, die bewirkt, dass es eine Funktion wird.Wie lese ich außerdem aus der Parameterklammer (Stack *)? Also was bedeutet das?
Das ist dasselbe wie
char pop(Stack *s);, der Name des Parameters wurde einfach weggelassen.
-
Danke, dann wär da schonmal Licht im Dunkeln...
-
Ich weiß trotzdem nicht wie ich implementieren soll
-
Siehe mein erstes Posting.
-
Hab ich ja gelesen aber nur weil eine Ahnung hab was ich machen muss, weiß ich noch nicht wie ich es machen muss & welche Operatoren hier angebracht sind.
-
Du solltest deine Überlegungen zu den Fragen hier posten. Dann gehts weiter.
Sorry, aber falls es bisher irgendwie noch unklar geblieben ist: Ich werde dir die Lösung nicht auf dem Silbertablett präsentieren.
-
Ich weiß trotzdem nicht wie ich implementieren soll
Kleine Hilfe:
Stack* create_stack(unsigned int); { neues element von Stack erzeugen. }void push(Stack *, char);{ Bei Stack* ein Stack-Elemement übergeben. Das Char am Ende anhängen. depth um 1 ehöhen }char pop(Stack *); { das char an stelle "depth" auslesen. Depth um 1 verringern. char zurück geben }int isEmpty(Stack *);{ könnte (vermutlich) depth zurück geben. }void destroy_stack(Stack *);{ Element wieder auflösen. }
-
Total kontraproduktiv.
Deine "Hilfe" ignoriert zudem die vorgegebene Bedeutung der struct-Member depth und top. Genau deshalb hab ich den OP doch gebeten, sich über diese Bedeutung erstmal klar zu werden ... wie sieht ein typisches Stack-Objekt eigentlich aus? Danach ergibt sich die Implementierung schon fast zwangsläufig.
-
Stack *s; (Der Zeiger s zeigt auf die Struktur Stack ?)
s = create_stack(3); (Der Zeiger s zeigt auf die Funktion create_stack mit 3 Rückgabewerten?)
-
Jop. Meinte Top statt Depth.
Wenn ich an seiner / ihrer Stelle wäre, würde es mir helfen. Also schreib ich auch.
Und darauf, dass ich mit "top" bestimme(n könnte) wie voll der Stack ist statt mit Depth, hätte ich dann schon von selbst gemerkt.EDIT
Stack *s; (Der Zeiger s zeigt auf die Struktur Stack ?)
s = create_stack(3); (Der Zeiger s zeigt auf die Funktion create_stack mit 3 Rückgabewerten?)Stack *s ist eine Variable die auf ein Stack-Objekt zeigen könnte.
create_stack(3); gibt ein Stack-Objekt zurück. *s zeigt auf dieses.
-
danke für die hilfe aber mir fehlt es eher an werkzeug.
neues element von stack erzeugen? eine instanz von Stack?
mfg
-
n3wbie schrieb:
Jop. Meinte Top statt Depth.
Wenn es so einfach wäre, hätte ich das schon gesehen und das auch geschrieben. Ist es aber nicht, z.B. soll top auf ein freies Feld zeigen. Bitte bedenke auch, dass der OP auf dem Level auch triviale Fehler in der Hilfe nicht immer selbst erkennen oder gar korrigieren kann.
-
plantplant schrieb:
neues element von stack erzeugen? eine instanz von Stack?
Bitte benutze ganze Sätze. Ich weiß nicht, was du wissen möchtest. Kennst du die Begriffe der objektorientierten Programmierung nicht? Oder weißt du nicht, wie du diese Konzepte in C* umsetzen kannst? Oder ganz was anderes?
*: Falls du dir dessen nicht bewusst bist: Auch wenn du gerade im C++-Forum fragst, so ist dein Code doch typisches C, mit einer einzigen (unnötigen) Zeile C++. Sogenanntes "C mit cout". In C++ würde man Objektorientierung ganz anders umsetzen, da sie direkt von der Sprache her unterstützt wird und du dir das ganze create, destroy und Pointergefummel sparen kannst (oder man nimmt den Stack aus der Standardbibliothek, aber ich kann durchaus nachvollziehen, dass man das vielleicht einmal selber programmieren sollte. Aber wie gesagt, in C++ ginge das ganz anders).
-
plantplant schrieb:
danke für die hilfe aber mir fehlt es eher an werkzeug.
neues element von stack erzeugen? eine instanz von Stack?
mfg
Weisst du wie man in C (bzw. C++ - je nachdem was es denn werden soll) Speicher anfordert?
-
Ja bei c++ mit "new", wobei ich dann doch auf den heap zugreife, in der Aufgabe es doch aber um den stack geht?!
Die Vorlesung behandelt c++, ich muss eben versuchen die Aufgabe so c++-typisch wie möglich zu lösen ohne das vorgegeben zu verändern. Ich bin zum einen von diesem Zeigergefummel wie du schon gesagt hast, durcheinander, und zum anderen weiß ich nicht mit welchen Operatoren ich hier ansetzen soll.
mfg
-
plantplant schrieb:
Ja bei c++ mit "new", wobei ich dann doch auf den heap zugreife, in der Aufgabe es doch aber um den stack geht?!
Du bringst da ein paar Sachen durcheinander.
Heap
Heap
Stack
Stack
Du sollst hier die Datenstruktur "Stack" implementieren.In C++ benutzt man übrigens so gut wie nie new, zumindest keines, das nicht sehr gut versteckt ist.