From d93508e5f4252dde9825c34037cdd94ece8e1f0b Mon Sep 17 00:00:00 2001 From: "ines.maya" <ines.maya@etu.hesge.ch> Date: Wed, 1 Dec 2021 01:05:24 +0100 Subject: [PATCH] Resolve "Add pop function that removes top of the stack and reallocates if top < capacity / 4" --- .gitignore | 2 ++ stack.c | 14 +++++++++++++- stack.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96249ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.o +main \ No newline at end of file diff --git a/stack.c b/stack.c index 6605c16..82e099b 100644 --- a/stack.c +++ b/stack.c @@ -18,6 +18,19 @@ void stack_destroy(stack *s){ s->top = -1; } +void stack_pop(stack *s, int *value){ + if (stack_is_empty(*s)) { + return; + } + if (s->top == s->capacity/4){ + s->capacity /= 2; + s->data = realloc(s->data, sizeof(int)*s->capacity); + } + + *value = s->data[s->top]; + s->top -= 1; +} + void stack_peek(stack s, int *value){ if (!stack_is_empty(s)) { *value = s.data[s.top]; @@ -51,4 +64,3 @@ int get_length(stack s) { return s.top + 1; } - diff --git a/stack.h b/stack.h index 6ccd51b..22defdd 100644 --- a/stack.h +++ b/stack.h @@ -11,6 +11,7 @@ void stack_init(stack *stack); void stack_destroy(stack *s); +void stack_pop(stack *s, int *value); void stack_peek(stack s, int *value); void stack_clone(stack s, stack *clone); int get_length(stack s); -- GitLab