Add unit test file test_stack.c
This commit is contained in:
parent
3f952b0413
commit
d51184f13b
40
stack.c
40
stack.c
@ -7,27 +7,47 @@
|
||||
* `top`: liefert das oberste Element zurück,
|
||||
* `clearStack`: gibt den gesamten Speicher frei. */
|
||||
|
||||
// Pushes data as pointer onto the stack.
|
||||
StackNode *push(StackNode *stack, void *data)
|
||||
// Pushes Daten als Zeiger auf den Stack.
|
||||
StackNode *push(StackNode *stack, void *data) //*stack zeigt auf oberstes Element des Stacks, *data auf beliebige Daten
|
||||
{
|
||||
StackNode *newNode = malloc(sizeof(StackNode)); //Reserviert Speicher für neues Element (newNode zeigt auf Speicher)
|
||||
if (newNode == NULL) //falls Speicherreservierung fehlgeschlagen (Zeiger zeigt auf nichts)
|
||||
return stack; //unveränderter Stack
|
||||
|
||||
newNode->data = data; //Übergeber Wert wird gespeichert
|
||||
newNode->next = stack; //Neues Element Top des Stacks
|
||||
|
||||
return newNode; //Zurückgeben des neuen Elements
|
||||
}
|
||||
|
||||
// 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)
|
||||
// Löscht das oberste Element des Stacks (letztes hinzugefügtes) und gibt den Speicher frei.
|
||||
StackNode *pop(StackNode *stack)
|
||||
{
|
||||
if (stack == NULL) //Falls Stack bereits leer (keine Änderung)
|
||||
return NULL;
|
||||
|
||||
StackNode *next = stack->next; //Speichert das nächste Element
|
||||
free(stack); // Löschen des oberen Stack-Knoten (Inhalt extra freigeben)
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
// Returns the data of the top element.
|
||||
void *top(StackNode *stack)
|
||||
// Gibt den Wert des obersten Elements zurück.
|
||||
void *top(StackNode *stack) //aktueller Stackkopf als Parameter (gibt void zurück)
|
||||
{
|
||||
if (stack == NULL) //Falls Stack bereits leer (keine Änderung)
|
||||
return NULL;
|
||||
|
||||
return stack->data; //Gibt Daten des oberen Stackknoten zurück (keine Änderung)
|
||||
}
|
||||
|
||||
// Clears stack and releases all memory.
|
||||
void clearStack(StackNode *stack)
|
||||
// Leert den Stack und gibt den gesamten Speicher frei.
|
||||
void clearStack(StackNode *stack) // gibt nichts zurück
|
||||
{
|
||||
|
||||
while (stack != NULL) // solang Elemente im Stack
|
||||
{
|
||||
StackNode *next = stack->next; //Speichert nächstes Element
|
||||
free(stack); //Gibt den Speicher des Knotens frei (Daten nicht)
|
||||
stack = next; // Wechsel zum nächsten Knoten
|
||||
}
|
||||
}
|
||||
17
stack.h
17
stack.h
@ -1,4 +1,4 @@
|
||||
#ifndef STACK_H
|
||||
#ifndef STACK_H //if not defined - Code nur ausgeführt wenn nicht definiert
|
||||
#define STACK_H
|
||||
|
||||
/* A stack is a special type of queue which uses the LIFO (last in, first out) principle.
|
||||
@ -9,17 +9,22 @@ The latest element is taken from the stack. */
|
||||
|
||||
//TODO: passenden Datentyp als struct anlegen
|
||||
|
||||
// Pushes data as pointer onto the stack.
|
||||
// Datentyp für Stack-Element
|
||||
typedef struct StackNode {
|
||||
void *data; // Zeiger auf Nutzdaten (Datentyp unbekannt)
|
||||
struct StackNode *next; // Zeiger auf das nächste Element
|
||||
} StackNode;
|
||||
|
||||
// Pushes Daten als Zeiger auf den Stack.
|
||||
StackNode *push(StackNode *stack, void *data);
|
||||
|
||||
// Deletes the top element of the stack (latest added element) and releases its memory. (Pointer to data has to be
|
||||
// freed by caller.)
|
||||
// Löscht das oberste Element des Stacks (letztes hinzugefügtes) und gibt den Speicher frei.
|
||||
StackNode *pop(StackNode *stack);
|
||||
|
||||
// Returns the data of the top element.
|
||||
// Gibt den Wert des obersten Elements zurück.
|
||||
void *top(StackNode *stack);
|
||||
|
||||
// Clears stack and releases all memory.
|
||||
// Leert den Stack und gibt den gesamten Speicher frei.
|
||||
void clearStack(StackNode *stack);
|
||||
|
||||
#endif
|
||||
|
||||
0
test_stack.c
Normal file
0
test_stack.c
Normal file
Loading…
x
Reference in New Issue
Block a user