diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..96249cede61f2cea6cf2a665bfce534ab0b1bee5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.o +main \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8af50656ccfdde0951d485cb65837405e468ad0c --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +CC=gcc +CFLAGS=-Wall -Wextra -pedantic -g -std=c11 -O3 +CFLAGS_ASAN=-fsanitize=address -fno-omit-frame-pointer +LDFLAGS=-lm +LDFLAGS_ASAN=-fsanitize=address -fno-omit-frame-pointer + +main: stack.o main.o + $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS) $(LDFLAGS_ASAN) + +%.o: %.c + $(CC) $(CFLAGS) $(CFLAGS_ASAN) -c $^ -o $@ + +clean: + rm -f *.o main diff --git a/main.c b/main.c index d42583f0d6614555e53d3ce9c08513ff630c6823..28bc37d3c95fc94c1a166bb7841d38d75cc82e25 100644 --- a/main.c +++ b/main.c @@ -4,7 +4,19 @@ int main(){ stack s; int value = 0; stack_init(&s); + + for (int i = 0; i < s.capacity; i++){ + s.top += 1; + s.data[s.top] = i; + printf("push : %d\n", s.data[s.top]); + } + // stack_is_empty(stack s) - stack_peek(s, &value); stack_pop(&s, &value); + stack_peek(s, &value); + + free(s.data); + s.data = NULL; + s.capacity = -1; + s.top = -1; } \ No newline at end of file diff --git a/stack.c b/stack.c index 9da70efb8799b3edf5a7505667284e3903d50c43..feee0645dadad997f564dcc030bfd55b3f270210 100644 --- a/stack.c +++ b/stack.c @@ -21,13 +21,18 @@ void stack_pop(stack *s, int *value){ if (stack_is_empty(*s)){ return; } + + if (s->top == s->capacity/4){ + s->capacity /= 2; + } + *value = s->data[s->top]; - s->top -= 1; printf("pop : %d, top : %d\n", s->data[s->top],s->top); + s->top -= 1; - // si capacite 2x trop grande, on la rend plus petite - if (s->capacity > 2*s->top){ - s->capacity = s->top; - s->data = realloc(s, sizeof(int)*s->capacity); - } + // // si capacite 2x trop grande, on la rend plus petite + // if (s->capacity > 2*s->top){ + // s->capacity = s->top; + // s->data = realloc(s, sizeof(int)*s->capacity); + // } }