From 432027782779b60c3f67f48d2c798e0b11f8eb43 Mon Sep 17 00:00:00 2001 From: O M <1368-amayaosc@users.noreply.gitlab.informatik.hu-berlin.de> Date: Thu, 12 May 2022 00:12:33 +0000 Subject: [PATCH] Replace stack.c --- stack.c | 57 ++++++++++----------------------------------------------- 1 file changed, 10 insertions(+), 47 deletions(-) diff --git a/stack.c b/stack.c index 6d898cb..cd5584e 100644 --- a/stack.c +++ b/stack.c @@ -1,6 +1,3 @@ -#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 */ -- GitLab