diff options
Diffstat (limited to 'test/stack.c')
-rw-r--r-- | test/stack.c | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/test/stack.c b/test/stack.c new file mode 100644 index 0000000..8d227f9 --- /dev/null +++ b/test/stack.c @@ -0,0 +1,106 @@ +#include <stdio.h> +#include "stack.h" + +struct stack_st stack = { .len = 0, //prageused el + .size = 0, // max el + .arr = NULL}; + +// Functions + +void stackPush(int val){ + if (stack.len == 0 || stack.arr == NULL){ + // Peame küsima mälu + stack.size = 1; + stack.arr = malloc(stack.size * sizeof(int)); + + if (stack.arr == NULL) { + printf("Mälu otsas\n"); + return; + } + stack.arr[stack.len++] = val; + } + + else if (stack.len == stack.size){ + int tmp_size = malloc(2 stack.size); + int* tmp_arr = realloc(stack.val, tmp_size * sizeof(int)); + + if (stack.arr == NULL) { + printf("Mälu otsas\n"); + return; + } + + stack.size = tmp_size; + stack.arr = tmp_arr; + stack.arr[stack.len] = val; + stack.len++; + return; + } + +} + + +int stackPop(void){ + // Mälu vähendamine + /* + return stack.arr[--stack.len]; + */ + // Peaks olema kogu värk. + + int x = stack.val[--stack.len] + int tmp_size = stack.size/2; + if (stack.len < tmp-size){ + int* tmp_arr = realloc(stack.arr, tmp_size *sizeof(int)); + if (!tmp_arr){ + printf("No good, malu ots"); + return 0; + } + stack.size = tmp_size; + stack.arr = tmp_arr; + + if (stack.len == 0) + stack_free(); +// End of new stuff // + + if (stackIsEmpty()){ + return 0; + } + int stackPopped = stack.arr[--stack.len]; + return stackPopped; +} + + +int stackIsEmpty(void) { + return !(stack.len > 0); +} + + +int stackPeek(){ + // To avoid funking up the stack.len + if (stackIsEmpty()) return 0; + else if (stack.len == 1) return stack.arr[1]; + else{ + int x = stackPop(); + stackPush(x); + return x; + } +} + + +void stackPrint(){ + while(1){ + if(stackIsEmpty()) + break; + + int x = stackPop(); + printf("%d\n", x); + } + return; +} + + +/* +stack_free(){ + free(stack.val); // kutsuda kõige lõpus vist + stack.arr = NULL; +} +*/ |