Fertig
This commit is contained in:
parent
dff4c782db
commit
6c6a28fbb2
@ -1,3 +1,4 @@
|
|||||||
Benedikt;4990
|
Benedikt;4990
|
||||||
player1;3999
|
player1;3999
|
||||||
|
Benedikt;2994
|
||||||
Beneidkt;2990
|
Beneidkt;2990
|
||||||
|
|||||||
52
test_stack.c
52
test_stack.c
@ -3,68 +3,108 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "stack.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)
|
void inspectStack(StackNode *stack)
|
||||||
{
|
{
|
||||||
if (stack != NULL)
|
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);
|
printf("Der Stack enthält die folgenden Elemente: %d", *(int*)stack->value);
|
||||||
|
|
||||||
|
// Über die verkettete Liste iterieren
|
||||||
while (stack->next != NULL)
|
while (stack->next != NULL)
|
||||||
{
|
{
|
||||||
printf(" %d", *(int*)stack->next->value);
|
printf(" %d", *(int*)stack->next->value);
|
||||||
stack = stack->next;
|
stack = stack->next; // zum nächsten Element wechseln
|
||||||
}
|
}
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Leerer Stack (NULL-Zeiger)
|
||||||
printf("Der Stack ist leer\n");
|
printf("Der Stack ist leer\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
// Zeiger auf den obersten Stack-Knoten
|
||||||
StackNode *stack;
|
StackNode *stack;
|
||||||
stack = NULL; // initialisierung mit NULL -> leere Liste
|
|
||||||
|
// Initialisierung: NULL entspricht einem leeren Stack
|
||||||
|
stack = NULL;
|
||||||
|
|
||||||
printf("...ein Element wird eingefügt...\n");
|
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;
|
int toBeRemoved = 42;
|
||||||
stack = push(stack, &toBeRemoved);
|
stack = push(stack, &toBeRemoved);
|
||||||
|
|
||||||
inspectStack(stack);
|
inspectStack(stack);
|
||||||
|
|
||||||
printf("...das Element wird wieder entfernt...\n");
|
printf("...das Element wird wieder entfernt...\n");
|
||||||
|
|
||||||
|
// pop gibt den neuen Stack-Top zurück
|
||||||
stack = pop(stack);
|
stack = pop(stack);
|
||||||
|
|
||||||
inspectStack(stack);
|
inspectStack(stack);
|
||||||
|
|
||||||
printf("...pop auf leeren Stack...\n");
|
printf("...pop auf leeren Stack...\n");
|
||||||
|
|
||||||
|
// pop auf leerem Stack sollte intern sicher behandelt werden
|
||||||
stack = pop(stack);
|
stack = pop(stack);
|
||||||
|
|
||||||
inspectStack(stack);
|
inspectStack(stack);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
|
||||||
|
// Statisches Array mit Beispieldaten
|
||||||
int data[5] = {1, 2, 3, 4, 5};
|
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++)
|
for (int i = 0; i < 5; i++)
|
||||||
{
|
{
|
||||||
stack = push(stack, &data[i]);
|
stack = push(stack, &data[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Gesamten Stack ausgeben */
|
||||||
//alle Elemente mit Test-Funktion ausgeben
|
|
||||||
inspectStack(stack);
|
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));
|
printf("1. Element war: %d\n", *(int*)top(stack));
|
||||||
stack = pop(stack);
|
stack = pop(stack);
|
||||||
|
|
||||||
printf("2. Element war: %d\n", *(int*)top(stack));
|
printf("2. Element war: %d\n", *(int*)top(stack));
|
||||||
stack = pop(stack);
|
stack = pop(stack);
|
||||||
|
|
||||||
printf("3. Element war: %d\n", *(int*)top(stack));
|
printf("3. Element war: %d\n", *(int*)top(stack));
|
||||||
stack = pop(stack);
|
stack = pop(stack);
|
||||||
|
|
||||||
printf("4. Element war: %d\n", *(int*)top(stack));
|
printf("4. Element war: %d\n", *(int*)top(stack));
|
||||||
stack = pop(stack);
|
stack = pop(stack);
|
||||||
|
|
||||||
printf("5. Element war: %d\n", *(int*)top(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