Fertig
This commit is contained in:
parent
dff4c782db
commit
6c6a28fbb2
@ -1,3 +1,4 @@
|
||||
Benedikt;4990
|
||||
player1;3999
|
||||
Benedikt;2994
|
||||
Beneidkt;2990
|
||||
|
||||
52
test_stack.c
52
test_stack.c
@ -3,68 +3,108 @@
|
||||
#include <stdlib.h>
|
||||
#include "stack.h"
|
||||
|
||||
/*
|
||||
* Gibt den gesamten Stack von oben (Top) nach unten aus.
|
||||
* Erwartet einen Zeiger auf den obersten StackNode.
|
||||
* Die Funktion verändert den Stack nicht dauerhaft,
|
||||
* da der lokale Zeiger 'stack' nur kopiert wird.
|
||||
*/
|
||||
void inspectStack(StackNode *stack)
|
||||
{
|
||||
if (stack != NULL)
|
||||
{
|
||||
//Erstes Element separat ausgeben, um kein führendes Leerzeichen zu haben
|
||||
printf("Der Stack enthält die folgenden Elemente: %d", *(int*)stack->value);
|
||||
|
||||
// Über die verkettete Liste iterieren
|
||||
while (stack->next != NULL)
|
||||
{
|
||||
printf(" %d", *(int*)stack->next->value);
|
||||
stack = stack->next;
|
||||
stack = stack->next; // zum nächsten Element wechseln
|
||||
}
|
||||
putchar('\n');
|
||||
}
|
||||
else
|
||||
{
|
||||
// Leerer Stack (NULL-Zeiger)
|
||||
printf("Der Stack ist leer\n");
|
||||
}
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
// Zeiger auf den obersten Stack-Knoten
|
||||
StackNode *stack;
|
||||
stack = NULL; // initialisierung mit NULL -> leere Liste
|
||||
|
||||
// Initialisierung: NULL entspricht einem leeren Stack
|
||||
stack = NULL;
|
||||
|
||||
printf("...ein Element wird eingefügt...\n");
|
||||
|
||||
/*
|
||||
* Achtung: Es wird die Adresse von 'toBeRemoved' gespeichert.
|
||||
* Das ist hier zulässig, da die Variable bis zum Ende von main
|
||||
* gültig bleibt. In allgemeinem Code sollte man stattdessen
|
||||
* dynamisch Speicher reservieren oder den Wert kopieren.
|
||||
*/
|
||||
int toBeRemoved = 42;
|
||||
stack = push(stack, &toBeRemoved);
|
||||
|
||||
inspectStack(stack);
|
||||
|
||||
printf("...das Element wird wieder entfernt...\n");
|
||||
|
||||
// pop gibt den neuen Stack-Top zurück
|
||||
stack = pop(stack);
|
||||
|
||||
inspectStack(stack);
|
||||
|
||||
printf("...pop auf leeren Stack...\n");
|
||||
|
||||
// pop auf leerem Stack sollte intern sicher behandelt werden
|
||||
stack = pop(stack);
|
||||
|
||||
inspectStack(stack);
|
||||
putchar('\n');
|
||||
|
||||
// Statisches Array mit Beispieldaten
|
||||
int data[5] = {1, 2, 3, 4, 5};
|
||||
|
||||
// alle 5 werte der reihe nach auf den Satck legen - 1 unten ... 5 oben
|
||||
/*
|
||||
* Alle 5 Werte der Reihe nach auf den Stack legen:
|
||||
* 1 liegt unten, 5 liegt oben (LIFO-Prinzip).
|
||||
*/
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
stack = push(stack, &data[i]);
|
||||
}
|
||||
|
||||
|
||||
//alle Elemente mit Test-Funktion ausgeben
|
||||
/* Gesamten Stack ausgeben */
|
||||
inspectStack(stack);
|
||||
|
||||
// Elemente stück für Stück ausgeben und entfernen
|
||||
/*
|
||||
* Elemente einzeln auslesen (top) und anschließend entfernen (pop).
|
||||
* Erwartete Ausgabe-Reihenfolge: 5, 4, 3, 2, 1
|
||||
*/
|
||||
printf("1. Element war: %d\n", *(int*)top(stack));
|
||||
stack = pop(stack);
|
||||
|
||||
printf("2. Element war: %d\n", *(int*)top(stack));
|
||||
stack = pop(stack);
|
||||
|
||||
printf("3. Element war: %d\n", *(int*)top(stack));
|
||||
stack = pop(stack);
|
||||
|
||||
printf("4. Element war: %d\n", *(int*)top(stack));
|
||||
stack = pop(stack);
|
||||
|
||||
printf("5. Element war: %d\n", *(int*)top(stack));
|
||||
|
||||
/*
|
||||
* Hinweis: Nach dem letzten top() sollte eigentlich noch
|
||||
* ein pop() erfolgen, um den Stack vollständig zu leeren
|
||||
* und ggf. dynamisch allokierten Speicher freizugeben.
|
||||
*/
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user