From c40837b156517487fe332884793c7067ad726e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20Kaan=20G=C3=9CM=C3=9C=C5=9E?= <96421894+Tahinli@users.noreply.github.com> Date: Sat, 6 Jul 2024 20:56:24 +0300 Subject: [PATCH] feat: :sparkles: Dynamic Stack in C --- Dynamic Stack in C/main.c | 105 +++++++++++++++++++++++ {Stack in C => Static Stack in C}/main.c | 0 2 files changed, 105 insertions(+) create mode 100644 Dynamic Stack in C/main.c rename {Stack in C => Static Stack in C}/main.c (100%) diff --git a/Dynamic Stack in C/main.c b/Dynamic Stack in C/main.c new file mode 100644 index 0000000..4f6e147 --- /dev/null +++ b/Dynamic Stack in C/main.c @@ -0,0 +1,105 @@ +#include +#include + +const int STACK_SIZE = 10; + +typedef struct Stack Stack; + +struct Stack { + int top; + int* elements; + int size; +}; + + +Stack new() { + Stack stack; + + stack.top = -1; + stack.size = 0; + stack.elements = (int*)malloc(0); + + return stack; +} + +int push(Stack* stack, int element) { + int* new_space_ptr = (int*)realloc(stack->elements, stack->size+sizeof(int)); + if (!new_space_ptr) { + return -1; + } + stack->size++; + stack->elements[stack->top+1] = element; + stack->top++; + return 0; +} + +int* pop(Stack* stack) { + if (stack->top == -1) { + return NULL; + } + int* element = &stack->elements[stack->top]; + int* new_space_ptr = (int*)realloc(stack->elements, stack->size-sizeof(int)); + if (new_space_ptr) { + return NULL; + } + stack->size--; + stack->top--; + return element; +} + +int* get(Stack* stack, int index) { + if (index < 0 || index > stack->top) { + return NULL; + } + return &stack->elements[index]; +} + +int search(Stack* stack, int element) { + int current_index = 0; + while (current_index <= stack->top) { + if (stack->elements[current_index] == element) { + return current_index; + } + current_index ++; + } + return -1; +} + +int main() { + printf("Hello World\n"); + + Stack stack = new(); + + push(&stack, 123); + push(&stack, 5); + int* value_ptr = get(&stack, 0); + if (!value_ptr) { + printf("NonValid Index\n"); + return -1; + } + printf("%d\n", *value_ptr); + + int searched = search(&stack, 5); + + if (searched== -1) { + printf("Not Found\n"); + return -1; + } + printf("Index of Searched Value = %d\n", searched); + + int* popped = pop(&stack); + + if(!popped) { + printf("Couldn't Popped"); + return -1; + } + + printf("%d\n", *popped); + + int searched_again = search(&stack, 5); + + if (searched_again== -1) { + printf("Not Found\n"); + return -1; + } +} \ No newline at end of file diff --git a/Stack in C/main.c b/Static Stack in C/main.c similarity index 100% rename from Stack in C/main.c rename to Static Stack in C/main.c