Brauche Stack Grundlagen

Xaver7

Grünschnabel
Hallo zusammen,

ich hoffe jemand von Euch kann mir helfen. Brauche dringend ein paar Erklärungen.

1. Was genau ist ein stack ?
Ich weiss, das wie eine Art Stapel ist, von dem ich immer nur das, was zuletzt draufgelegt wurde wieder runter nehmen kann.Das habe ich auch halbwegs verstanden
aber:

2. Wie lege ich einen stack an Ist das einfach ein array. Nur beim Zugriff greife ich immer auf das letzte Element zu und nehme das zur bearbeitung vom Stack ?
Ich weiss, dass es etwas mit den Funktionen push() und pop() zu tun hat. push legt drauf, push nimmts wieder runter.
Schreibe ich die Funktionen push und pop selber oder sind die in der stdio.h enthalten.

3. Am wichtigsten und ganz toll wäre es, wenn jemand ein Beispiel posten könnte, indem er einen stack anlegt ... und dann eine Zahl drauflegt und dann noch eine Zahl drauflegt. Diese dann wieder runternimmt um sie z.b zu addieren und dieses Beispiel ein bischen kommentiert.


Bitte habt ein bischen Nachsicht mit mir, aber ich bin Neuling in C und im Moment total verwirrt, was den Stack angeht, da ich über all nur Beschreibungen finde wie er funktioniert, aber immer ohne Beispiel wie er aussieht oder wie so eine Funktion push oder pop aufgebaut ist.


Danke schon mal im voraus für Eure Antworten.
 
Schade, das mir noch keiner geantwortet hat. Das Thema scheint so schwer zu sein, dass sich keiner damit auskennt!
 
Es scheint v. a. ein normaler Werktag zu sein und daher vielleicht noch nicht jeder in der Lage, innerhalb einiger weniger Stunden zu antworten... :rolleyes:
 
Hi,

Code:
Schade, das mir noch keiner geantwortet hat. Das Thema scheint so schwer zu sein, dass sich keiner damit auskennt!
nicht so ungeduldig!

Einen Stack muss du nicht anlegen, denn er ist standartmaesig da. Wenn du eine Funktion aufrufst, dann wird die Adresse der naechsten Anweisung nach der Funktion auf den Stack gelegt, sodass der PC weiss wo er nach der funktion weitermachen soll. Beispiel:
Code:
void foo()
{
  return; // PC springt zu der Adresse die in Stack steht, in diesem Fall zur Zeile "variable = 0;"
}

void main()
{
  int variable;
  foo();  // Die Adresse der Zeile "variable = 0;" wird auf den stack gelegt, und man geht zu foo()
  variable = 0;
}

der Stack wird auch noch zur Ubergabe von Parametern an Funktionen benutzt. Aber wie du siehst passiert das alles intern, und du brauchst dich als nrmaler C++ programmierer garnicht um den Stack zu kuemmern. Nur als Assembler programmierer, da gibts die befehle push und pop.
 
PixelShader hat gesagt.:
Hi,

Code:
Schade, das mir noch keiner geantwortet hat. Das Thema scheint so schwer zu sein, dass sich keiner damit auskennt!
nicht so ungeduldig!

Einen Stack muss du nicht anlegen, denn er ist standartmaesig da. Wenn du eine Funktion aufrufst, dann wird die Adresse der naechsten Anweisung nach der Funktion auf den Stack gelegt, sodass der PC weiss wo er nach der funktion weitermachen soll.

der Stack wird auch noch zur Ubergabe von Parametern an Funktionen benutzt. Aber wie du siehst passiert das alles intern, und du brauchst dich als nrmaler C++ programmierer garnicht um den Stack zu kuemmern. Nur als Assembler programmierer, da gibts die befehle push und pop.


Der Thread Ersteller meint sicherlich nicht den eingebauten Stackspeicher
sondern einen Stack als Datenstruktur:

1. Was genau ist ein stack ?
Ich weiss, das wie eine Art Stapel ist, von dem ich immer nur das, was zuletzt draufgelegt wurde wieder runter nehmen kann.Das habe ich auch halbwegs verstanden
aber:

http://de.wikipedia.org/wiki/Stack

Das hast du soweit schon richtig erfasst.

2. Wie lege ich einen stack an Ist das einfach ein array. Nur beim Zugriff greife ich immer auf das letzte Element zu und nehme das zur bearbeitung vom Stack ?Ich weiss, dass es etwas mit den Funktionen push() und pop() zu tun hat. push legt drauf, push nimmts wieder runter.
Schreibe ich die Funktionen push und pop selber oder sind die in der stdio.h enthalten.

In den Standard C Bibliotheken wirst du eine solche Datenstruktur nicht finden.
Aber dafür in der C++ STL:
http://www.sgi.com/tech/stl/stack.html

3. Am wichtigsten und ganz toll wäre es, wenn jemand ein Beispiel posten könnte, indem er einen stack anlegt ... und dann eine Zahl drauflegt und dann noch eine Zahl drauflegt. Diese dann wieder runternimmt um sie z.b zu addieren und dieses Beispiel ein bischen kommentiert.

Also ich denk mal den Stack als Array zu implementieren könntest du noch selber
hinbekommen.
Was wesentlich intressanter ist ist ihn als rekursuve Datenstruktur zu
implementieren, ich hab mir mal die Arbeit gemacht und einen geschrieben
schön dokumentiert usw. (siehe Anhang)

Gruß

RedWing
 

Anhänge

Zurück