From 5b6cb7af0bdb38d933086ea6d0dea52e0174be78 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: Mon, 8 Jul 2024 23:48:13 +0300 Subject: [PATCH] fix: :bug: creating local array causes unreliability --- Static Queue in C/main.c | 107 +++++++++++++++++++++++++++++++++++++++ Static Stack in C/main.c | 18 +++---- 2 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 Static Queue in C/main.c diff --git a/Static Queue in C/main.c b/Static Queue in C/main.c new file mode 100644 index 0000000..a5098a5 --- /dev/null +++ b/Static Queue in C/main.c @@ -0,0 +1,107 @@ +#include +#include + +typedef struct Queue Queue; + +const int QUEUE_SIZE = 10; + +struct Queue { + int* elements; + int last; +}; + +int* enqueue(Queue* queue, int element) { + if (queue->last <= 0) { + return NULL; + } + + queue->elements[queue->last] = element; + queue->last--; + return &queue->elements[queue->last+1]; +} + +void* dequeue(Queue* queue, int* result) { + if(queue->last == QUEUE_SIZE-1) { + return NULL; + } + *result = queue->elements[QUEUE_SIZE-1]; + memcpy(&queue->elements[queue->last+2], &queue->elements[queue->last+1], QUEUE_SIZE-queue->last-1); + queue->last++; + return queue; +} + +int* get(Queue* queue, int index) { + if(index > QUEUE_SIZE-1 || index < queue->last) { + return NULL; + } + + return &queue->elements[index]; +} + +int search(Queue* queue, int value) { + int current_index = QUEUE_SIZE-1; + while(current_index >= queue->last) { + if (queue->elements[current_index] == value) { + return current_index; + } + current_index--; + } + return -1; +} + +int main() { + printf("Hello World\n"); + + Queue queue; + queue.last = QUEUE_SIZE-1; + int elements[10]; + queue.elements = elements; + + int* result_enqueue = enqueue(&queue, 3); + if(!result_enqueue) { + printf("Error: Enqueue\n"); + return -1; + } + + int* result_enqueue_2 = enqueue(&queue, 5); + if(!result_enqueue_2) { + printf("Error: Enqueue 2\n"); + return -1; + } + + int* result_get = get(&queue, 9); + + if(!result_get) { + printf("Error: Get\n"); + return -1; + } + + printf("9. Index = %d\n", *result_get); + + int dequeued = 0; + int* result_dequeue = dequeue(&queue, &dequeued); + + if(!result_dequeue) { + printf("Error: Dequeue\n"); + return -1; + } + + printf("First Element = %d\n", dequeued); + + int result_search = search(&queue, 5); + + if(result_search == -1) { + printf("Error: Search\n"); + return -1; + } + + printf("Searched Index = %d\n", result_search); + + int result_search_2 = search(&queue, 10); + + if(result_search_2 == -1) { + printf("Error: Search 2\n"); + return -1; + } + +} \ No newline at end of file diff --git a/Static Stack in C/main.c b/Static Stack in C/main.c index 46ac04d..cbd00c1 100644 --- a/Static Stack in C/main.c +++ b/Static Stack in C/main.c @@ -11,17 +11,6 @@ struct Stack { }; -Stack new() { - Stack stack; - - stack.top = -1; - stack.size = STACK_SIZE; - int elements[STACK_SIZE]; - stack.elements = elements; - - return stack; -} - int push(Stack* stack, int element) { if (stack->top +1 > stack->size) { return -1; @@ -61,7 +50,12 @@ int search(Stack* stack, int element) { int main() { printf("Hello World\n"); - Stack stack = new(); + Stack stack; + + stack.top = -1; + stack.size = STACK_SIZE; + int elements[STACK_SIZE]; + stack.elements = elements; push(&stack, 123); push(&stack, 5);