Stack und Queue
-
Hi
Ich hab die Aufgabe bekommen ein Referat über Stack und Queue zu machen. Ich hab mir die Sachen bei Wikipedia angeguckt und mir eine Power Point Präsi von einem anderen. Ich hab ein paar Sachen verstanden aber noch nicht genug um selber ein Programm mit Stack zu schreiben. Deswegen wollte ich fragen ob mir jemand ein ganz simples Programm geben könnte wo man sehen kann was ein Stack überhaupt ist und wie er funktioniert
MfG
DòÓm
-
DòÓm schrieb:
Deswegen wollte ich fragen ob mir jemand ein ganz simples Programm geben könnte wo man sehen kann was ein Stack überhaupt ist und wie er funktioniert
// stack speicher char stack[256]; // stack pointer char *stackptr = stack; // einen wert auf den stack tun int push (char a) { // stack voll? dann -1 zurückgeben if (stackptr == stack+sizeof(stack)) return -1; // wert auf den stack tun... *stackptr++ = a; // und 1 (hat geklappt) zurückgeben return 1; } // einen wert von stack holen int pop (void) { // stack leer? dann -1 zurückgeben if (stackptr == stack) return -1; // ansonsten wert vom stack holen und zurückgeben return *--stackptr; }
-
danke
-
schau mal hier:
http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#2.2._Unsere_Testklasse_loggt_mit
http://www.henkessoft.de/C++/C++ Fortgeschrittene/C++_Fortgeschrittene.htm#2.6._Template-Stack-Klasse
Damit sieht man sehr schön, wie der Stack arbeitet.
-
Erhard Henkes schrieb:
Damit sieht man sehr schön, wie der Stack arbeitet.
http://www.cosc.canterbury.ac.nz/people/mukundan/dsal/StackAppl.html
-
Schöne Animation.
-
vista schrieb:
DòÓm schrieb:
Deswegen wollte ich fragen ob mir jemand ein ganz simples Programm geben könnte wo man sehen kann was ein Stack überhaupt ist und wie er funktioniert
// stack speicher char stack[256]; // stack pointer char *stackptr = stack; // einen wert auf den stack tun int push (char a) { // stack voll? dann -1 zurückgeben if (stackptr == stack+sizeof(stack)) return -1; // wert auf den stack tun... *stackptr++ = a; // und 1 (hat geklappt) zurückgeben return 1; } // einen wert von stack holen int pop (void) { // stack leer? dann -1 zurückgeben if (stackptr == stack) return -1; // ansonsten wert vom stack holen und zurückgeben return *--stackptr; }
Hi
Ich hab noch mal eine frage. Irendwie krieg ich das jetzt nicht hin damit ein Hauptprogramm zu schreiben. Also sowas wo ich eingegben kann was auf den stack gelegt werden soll und ob da was gelöscht werden kann. Kannst du mir da vllt. wieder helfen?
-
#include <cassert> #include <iostream> #include <string> // std:string class Stack { public: typedef int value_type; static unsigned const max_size = 200; Stack() : m_cur( 0 ) {} void push( const value_type& x ) { assert( m_cur < max_size ); m_data[ m_cur++ ] = x; } value_type& top() { assert( m_cur > 0 ); return m_data[ m_cur-1 ]; } void pop() { assert( m_cur > 0 ); --m_cur; } bool empty() const { return m_cur == 0; } private: value_type m_data[max_size]; unsigned m_cur; }; int main() { using namespace std; Stack s; cout << "Geben sie 'push <int>' oder 'pop' ein; Ende mit x" << endl; for( string in; cout << "> ", cin >> in && in != "x"; cin.clear(), cin.ignore( 999, '\n' ) ) { int z; if( in == "pop" && !s.empty() ) { s.pop(); } else if( in == "push" && cin >> z ) { s.push( z ); } else { cout << "?" << endl; continue; } if( s.empty() ) cout << "Stack ist leer " << endl; else cout << "oberstes Element auf dem Stack ist " << s.top() << endl; } return 0; }
Gruß
Werner
-
DòÓm schrieb:
Ich hab noch mal eine frage. Irendwie krieg ich das jetzt nicht hin damit ein Hauptprogramm zu schreiben. Also sowas wo ich eingegben kann was auf den stack gelegt werden soll und ob da was gelöscht werden kann. Kannst du mir da vllt. wieder helfen?
#include <stdio.h> int main() { char txt[256], *p=txt; int c; printf ("gib deinen namen ein:"); scanf ("%s", txt); printf ("hallo, "); // text auf den stack... while (*p) push (*p++); // ...und alles wieder vom stack holen und ausgeben while ((c = pop()) > 0) putchar (c); }