Skip to content
Snippets Groups Projects
Commit 43202778 authored by Oscar Amaya Mohr's avatar Oscar Amaya Mohr
Browse files

Replace stack.c

parent 4e3b6aa9
Branches main
No related merge requests found
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
......@@ -12,37 +9,25 @@ void die(char* msg) {
exit(EXIT_FAILURE);
}
/* *** Strukturen *********************************************************** */
/**@brief Struktur des Stacks.
*/
typedef struct {
size_t size;
size_t capacity;
int* data;
} IntStack;
/* *** öffentliche Schnittstelle ******************************************** */
/**@brief Initialisiert einen neuen Stack.
* @param self der zu initialisierende Stack
* @return 0, falls keine Fehler bei der Initialisierung aufgetreten sind,
* != 0, ansonsten
*/
int stackInit(IntStack *self) {
self->size = 0;
self->capacity = INTSTACK_INIT_CAPACITY;
self->data = malloc(self->capacity * sizeof(int));
return self->data ? 0 : -1;
}
/**@brief Gibt den Stack und alle assoziierten Strukturen frei.
* NOTE: Caller frees IntStack*, since in test there are automatic
* storage duration non malloc'ed unfreeable IntStacks
* @param self der Stack
*/
// NOTE: Caller frees IntStack*, since in test there are automatic
// storage duration non malloc'ed unfreeable IntStacks
void stackRelease(IntStack *self) {
free(self->data);
if (self)
free(self->data);
}
void stackResize(IntStack *self, size_t new_capacity) {
......@@ -50,12 +35,8 @@ void stackResize(IntStack *self, size_t new_capacity) {
self->data = realloc(self->data, self->capacity * sizeof(int));
}
/**@brief Legt einen Wert auf den intstack.
* @param self der intstack
* @param i der Wert
*/
void stackPush(IntStack *self, int i) {
self->size++;
self->size += 1;
if (self->size >= self->capacity)
stackResize(self, 2 * self->capacity);
......@@ -63,10 +44,6 @@ void stackPush(IntStack *self, int i) {
self->data[self->size - 1] = i;
}
/**@brief Gibt das oberste Element des Stacks zurück.
* @param self der Stack
* @return das oberste Element
*/
int stackTop(const IntStack *self) {
if (!self->size) {
stackRelease((IntStack *) self);
......@@ -76,10 +53,6 @@ int stackTop(const IntStack *self) {
return self->data[self->size - 1];
}
/**@brief Entfernt und liefert das oberste Element des Stacks.
* @param self der Stack
* @return das oberste Element
*/
int stackPop(IntStack *self) {
if (!self->size) {
stackRelease(self);
......@@ -94,29 +67,19 @@ int stackPop(IntStack *self) {
return self->data[self->size];
}
/**@brief Gibt zurück, ob der Stack leer ist.
* @param self der Stack
* @return 0, falls nicht leer,
!= 0, falls leer
*/
int stackIsEmpty(const IntStack *self) {
return self->size == 0;
}
/**@brief Gibt den Inhalt des Stacks beginnend mit dem obersten Element auf der
* Standardausgabe aus.
* @param self der Stack
*/
void stackPrint(const IntStack *self) {
printf("top(");
for (int i = (int) self->size - 1; i > 0; i--)
printf("%d, ", self->data[i]);
if (self->size) {
for (size_t i = self->size - 1; i > 0; i--)
printf("%d, ", self->data[i]);
if (self->size > 0)
printf("%d", self->data[0]);
}
printf(")bot\n");
}
#endif /* STACK_H_INCLUDED */
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment