Meinst du wirklich reines C oder C++?
Ja reines C, meinem Dozenten stellen sich die Nackenhaare
auf, wenn ich C++ programmiere.
Naja, mit C kann man sich selbst in den Fuß schießen, C++ erledigt gleich das ganze Dorf. Aber ansonsten kann man mit der EInstellung auch gleich Java nehmen 
Es ist bestandteil unseres Programmierpraktikums, und das
Vorlesungsscipt gibt da leider nicht viel her. Statt das Ganze
an einem gut dokummentiertes Beispiel zu erleutern bekommt man
da ein par Programmschnippsel vorgeworfen.
Das ist wirklich übel.
Werd mich dann wohl weiter auf der Suche nach einem Beispel
machen das ich nachvollziehen kann.
Das grobe Stack-Konzept ist dir schon vertraut, oder? Ein Stapel bei dem man jeweils nur an das oberste Element mit den Operationen Push, Pop und Top rankommt.
Du nimmst also die Datenstrukturen aus meiner ersten Antwort. Nehmen wir beispielsweise mal an, dass du irgendwelche Strings verwalten willst.
#include
#include
struct StackElement {
StackElement\* previous;
char\* data;
};
/\* struct Stack ist wie gehabt \*/
char\* Top( struct Stack\* s ) {
return s-\>top-\>data;
}
void Pop( struct Stack\* s ) {
struct StackElement\* temp;
/\* Wir benutzen NULL als eine Art Markierung
\* des Stack-Bodens \*/
if( s-\>top != NULL ) {
temp = s-\>top;
s-\>top = temp-\>previous;
/\* Freigeben des Speichers, der in Push reserviert wird \*/
free( temp );
}
}
void Push( struct Stack\* s, char\* ptr ) {
struct StackElement\* nse;
/\* Speicher für ein neues StackElement reservieren \*/
nse = (struct StackElement\*)malloc( sizeof(struct StackElement) );
/\* nse initialisieren \*/
nse-\>previous = s-\>top;
nse-\>data = ptr;
/\* nse als neues top-Element des Stacks eintragen \*/
s-\>top = nse;
}
int main( void ) {
Stack s;
/\* Daten zum Testen \*/
char\* data[] = {
"Test 1",
"Test 2",
"Test 3"
};
/\* Erstmal die Elemente vernünftig einstellen \*/
s.botom = NULL;
s.top = NULL;
/\* Jetzt geben wir ein paar Elemente auf den Stack \*/
Push( &s, data[0] );
Push( &s, data[1] );
Push( &s, data[2] );
/\* ... und lesen sie wieder aus \*/
printf( "%s\n", Top( &s ) );
Pop( &s );
printf( "%s\n", Top( &s ) );
Pop( &s );
printf( "%s\n", Top( &s ) );
Pop( &s );
exit(0);
}
Das ganze ist ohne Garantie auf Lauffähigkeit oder Korrektheit (einfach nur schnell hier in die Eingabebox gehackt). Außerdem kann es sein, dass malloc() einen Nullpointer zurückgibt, was korrekt gehandhabt werden sollte.
In C++ wäre das ganze in etwa ein Dreizeiler.