diff --git a/stack.c b/stack.c index b7177fb..e9b7646 100644 --- a/stack.c +++ b/stack.c @@ -1,23 +1,28 @@ #include #include +#include +#include -typedef struct { +#include "stack.h" + +struct Stack { void** data; int top_index; int capacity; int curr_size; -} Stack; +}; Stack* new_stack(int stack_size) { - Stack* stack = malloc(sizeof(Stack)); - stack->capacity = stack_size; - stack->data = malloc(stack_size); - stack->top_index = 0; - stack->curr_size = 0; - return stack; + assert(stack_size > 0); + Stack* my_stack = malloc(sizeof(Stack)); + my_stack->capacity = stack_size; + my_stack->data = malloc(stack_size); + my_stack->top_index = 0; + my_stack->curr_size = 0; + return my_stack; } -void push(Stack* stack,void* element) { +void stack_push(Stack* stack,void* element) { if (stack->curr_size >= stack->capacity-1) { stack->data = realloc(stack->data, stack->capacity*2); stack->capacity *= 2; @@ -29,7 +34,8 @@ void push(Stack* stack,void* element) { return; } -void* pop(Stack* stack) { +void* stack_pop(Stack* stack) { + assert( !(stack_isEmpty(stack)) ); stack->top_index--; void* to_return = *(stack->data + stack->top_index); *(stack->data + stack->top_index) = NULL; @@ -39,25 +45,18 @@ void* pop(Stack* stack) { return to_return; } -void* peek(Stack* stack) { +void* stack_peek(Stack* stack) { void* to_return = *(stack->data + stack->top_index - 1); return to_return; } -int size(Stack* stack) { +int stack_size(Stack* stack) { return (stack->curr_size); } -void main() { - Stack* stack = new_stack(10); - int a = 2; - int b = 3; - int c = 4; - push(stack,(void *)&a); - push(stack,(void *)&b); - push(stack,(void *)&c); - printf("%d\n",*( (int *) pop(stack))); - printf("%d\n",*( (int *) pop(stack))); - printf("%d\n",*( (int *) pop(stack))); -// printf("%d\n",size(stack)); +bool stack_isEmpty(Stack* stack) { + if (stack_size(stack) == 0) { + return true; + } + return false; } diff --git a/stack.h b/stack.h new file mode 100644 index 0000000..56ab7cf --- /dev/null +++ b/stack.h @@ -0,0 +1,11 @@ +#include + +typedef struct Stack Stack; + +Stack* new_stack(int stack_size); + +void stack_push(Stack* stack, void* element); +void* stack_pop(Stack* stack); +void* stack_peek(Stack* stack); +int stack_size(Stack* stack); +bool stack_isEmpty(Stack* stack);