Compare commits

...

2 Commits

Author SHA1 Message Date
Jens Burger
00fafec3dc test_stack.c erstellt 2025-12-05 14:33:22 +01:00
Jens Burger
cc927ad723 Stack Funktionen hinzugefügt 2025-12-05 12:19:11 +01:00
4 changed files with 167 additions and 0 deletions

View File

@ -1 +1,2 @@
player_name;9943
player1;3999

40
stack.c
View File

@ -10,24 +10,64 @@
// Pushes data as pointer onto the stack.
StackNode *push(StackNode *stack, void *data)
{
StackNode *newNode = malloc(sizeof(StackNode));
if(newNode == NULL)
{
//printf("Fehler Bei Speicherallozierung!");
return NULL;
}
newNode->data = data;
newNode->next = stack;
return newNode;
}
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be
// freed by caller.)
StackNode *pop(StackNode *stack)
{
if(stack == NULL)
{
//printf("Fehlerhafte Adresse uebergeben");
return NULL;
}
StackNode *next = stack->next;
free(stack);
return next;
}
// Returns the data of the top element.
void *top(StackNode *stack)
{
if(stack == NULL)
{
//printf("Fehlerhafte Adresse uebergeben");
return NULL;
}
return stack->data;
}
// Clears stack and releases all memory.
void clearStack(StackNode *stack)
{
if(stack == NULL)
{
//printf("Fehlerhafte Adresse uebergeben");
return;
}
StackNode *currentNode = stack;
StackNode *nextNode;
while(currentNode != NULL)
{
nextNode = currentNode->next;
free(currentNode);
currentNode = nextNode;
}
}

View File

@ -8,6 +8,11 @@ The latest element is taken from the stack. */
#include <stdlib.h>
//TODO: passenden Datentyp als struct anlegen
typedef struct StackNode
{
void *data;
struct StackNode *next;
} StackNode;
// Pushes data as pointer onto the stack.
StackNode *push(StackNode *stack, void *data);

121
test_stack.c Normal file
View File

@ -0,0 +1,121 @@
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
void testeStackBeschreiben()
{
printf("=== Test: push() ===\n");
StackNode *stack = NULL;
int wert1 = 42;
stack = push(stack, &wert1);
int *topValue = (int *)(stack->data);
if(topValue != NULL && *topValue == 42)
{
printf("Test 1: Erstes Element erfolgreich gepusht!\n");
}
else
{
printf("Test 1: FEHLGESCHLAGEN!\n");
}
int wert2 = 12;
stack = push(stack, &wert2);
topValue = (int *)(stack->data);
int *secondValue = (int *)((stack->next)->data);
if(topValue != NULL && *topValue == 12.25 && secondValue != NULL && *secondValue == 42)
{
printf("Test 2: Zweites Element erfolgreich gepusht!\n");
}
else
{
printf("Test 2: FEHLGESCHLAGEN!\n");
}
printf("=== Ende Test: push() ===\n\n");
return;
}
void testepop()
{
printf("=== Test: pop() ===\n");
StackNode *stack = NULL;
int wert1 = 20;
int wert2 = 74;
stack = push(stack, &wert1);
stack = push(stack, &wert2);
stack = pop(stack);
int *topValue = (int *)(stack->data);
if(topValue != NULL && *topValue == 20)
{
printf("Test: Erstes Element erfolgreich gelöscht!\n");
}
else
{
printf("Test 1: FEHLGESCHLAGEN!\n");
}
printf("=== Ende Test: pop() ===\n\n");
}
void testetop()
{
printf("=== Test: top() ===\n");
StackNode *stack = NULL;
int wert1 = 20;
int wert2 = 74;
stack = push(stack, &wert1);
stack = push(stack, &wert2);
int *topValue = top(stack);
if(topValue != NULL && *topValue == 74)
{
printf("Test: top() gibt korrektes Element zurück!\n");
}
else
{
printf("Test: FEHLGESCHLAGEN!\n");
}
printf("=== Ende Test: top() ===\n\n");
}
void testeclearStack()
{
printf("=== Test: clearStack() ===\n");
StackNode *stack = NULL;
int wert1 = 20;
int wert2 = 74;
stack = push(stack, &wert1);
stack = push(stack, &wert2);
clearStack(stack);
printf("Test: clearStack() aufgerufen. Speicher freigegeben.\n");
printf("=== Ende Test: clearStack() ===\n\n");
}
int main()
{
testeStackBeschreiben();
testepop();
testetop();
testeclearStack();
return 0;
}