From 392214e2cb3cdcf0734788fe11ca91d46e621cd4 Mon Sep 17 00:00:00 2001 From: Stanislav Klimovich Date: Thu, 16 Oct 2025 15:40:01 +0000 Subject: [PATCH 1/7] The stack is implemended in a separated stack folder (stack.c and stack.h) --- Stack/stack.c | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++ Stack/stack.h | 28 ++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 Stack/stack.c create mode 100644 Stack/stack.h diff --git a/Stack/stack.c b/Stack/stack.c new file mode 100644 index 0000000..51cb4a7 --- /dev/null +++ b/Stack/stack.c @@ -0,0 +1,80 @@ +#include +#include +#include "stack.h" + + +typedef struct tag_obj +{ + int data; + struct tag_obj* next; +} OBJ; + +OBJ* stack_new(void) +{ + return NULL; +} + +OBJ* stack_push(OBJ* top, int data) +{ + OBJ* ptr = malloc(sizeof(OBJ)); + ptr->data = data; + ptr->next = top; + + return ptr; +} + +// Взять элемент со стека +OBJ* stack_pop(OBJ* top) +{ + if(top == NULL) + { + printf("Стек пуст\n"); + return top; + } + + OBJ* ptr_next = top->next; + free(top); + + return ptr_next; +} + +OBJ* stack_delete(OBJ* top) +{ + OBJ* current = top; + while (current != NULL) + { + OBJ* temp = current; + current = current->next; + free(temp); + } + + return 0; +} + +// Функция для просмотра элемента сверху +int stack_peek(const OBJ* top) +{ + if(top == NULL) + { + printf("Стек пуст\n"); + return -1; + } + + return top->data; +} + +void show(const OBJ* top) +{ + const OBJ* current = top; + if(top == NULL) + { + printf("Стек пуст\n"); + return; + } + + while(current != NULL) + { + printf("%d\n", current->data); + current = current->next; + } +} diff --git a/Stack/stack.h b/Stack/stack.h new file mode 100644 index 0000000..ee80b5f --- /dev/null +++ b/Stack/stack.h @@ -0,0 +1,28 @@ +#ifdef STACK_H +#define STACK_H + +typedef struct tag_obj +{ + int data; + struct tag_obj* next; +} OBJ; + +// Создание нового стека +OBJ* stack_new(void); + +// Добавление элемента на стек +OBJ* stack_push(OBJ* top, int data); + +// Удаление верхнего элемента +OBJ* stack_pop(OBJ* top); + +// Удаление стека +OBJ* stack_delete(OBJ* top); + +// Просмотр верхнего элемента +int stack_peek(OBJ* top); + +// Вывод содержимого +void stack_show(OBJ* top); + +#endif \ No newline at end of file From 47932f574630c258a833082c51a48248ececab0b Mon Sep 17 00:00:00 2001 From: Stanislav Klimovich Date: Wed, 22 Oct 2025 17:52:16 +0000 Subject: [PATCH 2/7] minor stack fix --- 5.Stack-and-Quene/Stack/stack.c | 74 +++++++++++++++++++++++++++++++++ 5.Stack-and-Quene/Stack/stack.h | 28 +++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 5.Stack-and-Quene/Stack/stack.c create mode 100644 5.Stack-and-Quene/Stack/stack.h diff --git a/5.Stack-and-Quene/Stack/stack.c b/5.Stack-and-Quene/Stack/stack.c new file mode 100644 index 0000000..7e07719 --- /dev/null +++ b/5.Stack-and-Quene/Stack/stack.c @@ -0,0 +1,74 @@ +#include +#include +#include "stack.h" + + +OBJ* stack_new(void) +{ + return NULL; +} + +OBJ* stack_push(OBJ* top, char data) +{ + OBJ* ptr = malloc(sizeof(OBJ)); + ptr->data = data; + ptr->next = top; + + return ptr; +} + +// Взять элемент со стека +OBJ* stack_pop(OBJ* top) +{ + if(top == NULL) + { + printf("Стек пуст\n"); + return top; + } + + OBJ* ptr_next = top->next; + free(top); + + return ptr_next; +} + +OBJ* stack_delete(OBJ* top) +{ + OBJ* current = top; + while (current != NULL) + { + OBJ* temp = current; + current = current->next; + free(temp); + } + + return 0; +} + +// Функция для просмотра элемента сверху +int stack_peek(const OBJ* top) +{ + if(top == NULL) + { + printf("Стек пуст\n"); + return -1; + } + + return top->data; +} + +void show(const OBJ* top) +{ + const OBJ* current = top; + if(top == NULL) + { + printf("Стек пуст\n"); + return; + } + + while(current != NULL) + { + printf("%d\n", current->data); + current = current->next; + } +} diff --git a/5.Stack-and-Quene/Stack/stack.h b/5.Stack-and-Quene/Stack/stack.h new file mode 100644 index 0000000..1e5ea1b --- /dev/null +++ b/5.Stack-and-Quene/Stack/stack.h @@ -0,0 +1,28 @@ +#ifndef STACK_H +#define STACK_H + +typedef struct tag_obj +{ + int data; + struct tag_obj* next; +} OBJ; + +// Создание нового стека +OBJ* stack_new(void); + +// Добавление элемента на стек +OBJ* stack_push(OBJ* top, int data); + +// Удаление верхнего элемента +OBJ* stack_pop(OBJ* top); + +// Удаление стека +OBJ* stack_delete(OBJ* top); + +// Просмотр верхнего элемента +int stack_peek(OBJ* top); + +// Вывод содержимого +void stack_show(OBJ* top); + +#endif \ No newline at end of file From 7c2ba6de75789ec72694cd7f9cd5da0585ef19e3 Mon Sep 17 00:00:00 2001 From: Stanislav Klimovich Date: Wed, 22 Oct 2025 17:56:47 +0000 Subject: [PATCH 3/7] minnor fix stack 2 --- 5.Stack-and-Quene/Stack/stack.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/5.Stack-and-Quene/Stack/stack.h b/5.Stack-and-Quene/Stack/stack.h index 1e5ea1b..79fb7e8 100644 --- a/5.Stack-and-Quene/Stack/stack.h +++ b/5.Stack-and-Quene/Stack/stack.h @@ -3,7 +3,7 @@ typedef struct tag_obj { - int data; + char data; struct tag_obj* next; } OBJ; From 8ff136714d13102e584eb9be4d7b6b9ea895e919 Mon Sep 17 00:00:00 2001 From: Stanislav Klimovich Date: Wed, 22 Oct 2025 17:59:54 +0000 Subject: [PATCH 4/7] minnor fix stack 3 --- 5.Stack-and-Quene/Stack/stack.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/5.Stack-and-Quene/Stack/stack.h b/5.Stack-and-Quene/Stack/stack.h index 79fb7e8..67bc80d 100644 --- a/5.Stack-and-Quene/Stack/stack.h +++ b/5.Stack-and-Quene/Stack/stack.h @@ -11,7 +11,7 @@ typedef struct tag_obj OBJ* stack_new(void); // Добавление элемента на стек -OBJ* stack_push(OBJ* top, int data); +OBJ* stack_push(OBJ* top, char data); // Удаление верхнего элемента OBJ* stack_pop(OBJ* top); @@ -20,7 +20,7 @@ OBJ* stack_pop(OBJ* top); OBJ* stack_delete(OBJ* top); // Просмотр верхнего элемента -int stack_peek(OBJ* top); +char stack_peek(OBJ* top); // Вывод содержимого void stack_show(OBJ* top); From 9f402bb79d9737923d713eeec627756ebe546200 Mon Sep 17 00:00:00 2001 From: Stanislav Klimovich Date: Wed, 22 Oct 2025 18:02:21 +0000 Subject: [PATCH 5/7] minor fix stack 4 --- 5.Stack-and-Quene/Stack/stack.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/5.Stack-and-Quene/Stack/stack.c b/5.Stack-and-Quene/Stack/stack.c index 7e07719..f23663f 100644 --- a/5.Stack-and-Quene/Stack/stack.c +++ b/5.Stack-and-Quene/Stack/stack.c @@ -46,7 +46,7 @@ OBJ* stack_delete(OBJ* top) } // Функция для просмотра элемента сверху -int stack_peek(const OBJ* top) +char stack_peek(const OBJ* top) { if(top == NULL) { From a7a72c20edb47eb7de5b0a093f375238b0aa8dd0 Mon Sep 17 00:00:00 2001 From: Stanislav Klimovich Date: Wed, 22 Oct 2025 18:05:32 +0000 Subject: [PATCH 6/7] minor fix stack 5 --- 5.Stack-and-Quene/Stack/stack.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/5.Stack-and-Quene/Stack/stack.h b/5.Stack-and-Quene/Stack/stack.h index 67bc80d..83434cc 100644 --- a/5.Stack-and-Quene/Stack/stack.h +++ b/5.Stack-and-Quene/Stack/stack.h @@ -20,7 +20,7 @@ OBJ* stack_pop(OBJ* top); OBJ* stack_delete(OBJ* top); // Просмотр верхнего элемента -char stack_peek(OBJ* top); +char stack_peek(const OBJ* top); // Вывод содержимого void stack_show(OBJ* top); From aa5b623cd433cb50e00e5ea6e54ea27004b225eb Mon Sep 17 00:00:00 2001 From: Stanislav Klimovich Date: Wed, 22 Oct 2025 18:18:01 +0000 Subject: [PATCH 7/7] Implemented advanced bracket balance --- .../Task_1/Advancd-bracket-balance.c | 82 ++++++++++++++++++ 5.Stack-and-Quene/Task_1/a.out | Bin 0 -> 25448 bytes 2 files changed, 82 insertions(+) create mode 100644 5.Stack-and-Quene/Task_1/Advancd-bracket-balance.c create mode 100755 5.Stack-and-Quene/Task_1/a.out diff --git a/5.Stack-and-Quene/Task_1/Advancd-bracket-balance.c b/5.Stack-and-Quene/Task_1/Advancd-bracket-balance.c new file mode 100644 index 0000000..bd39178 --- /dev/null +++ b/5.Stack-and-Quene/Task_1/Advancd-bracket-balance.c @@ -0,0 +1,82 @@ +#include +#include +#include "../Stack/stack.h" + + +char get_matching_opening(char closing) { + switch(closing) { + case ')': return '('; + case ']': return '['; + case '}': return '{'; + default: return '\0'; + } +} + +int check_balance(const char* text) +{ + OBJ* stack = stack_new(); + int length = strlen(text); + + for (int i = 0; i < length; i++) + { + char current = text[i]; + + if(current == '(' || current == '[' || current == '{') + { + stack = stack_push(stack, current); + } + + else if(current == ')' || current == ']' || current == '}') + { + if(stack == NULL) + { + stack_delete(stack); + return 0; + } + + char expected = get_matching_opening(current); + char actual = stack_peek(stack); + + if(actual == expected) + { + stack = stack_pop(stack); + } + else + { + stack_delete(stack); + return 0; + } + } + } + + int result = (stack == NULL); + stack_delete(stack); + + return result; +} + + +int main(void) +{ + char text[1000]; + + printf("Введите текст\n"); + if (fgets(text, sizeof(text), stdin) == NULL) + { + printf("Ошибка ввода!\n"); + return 1; + } + + if (check_balance(text)) + { + printf("Скобки сбалансированы\n"); + } + + else + { + printf("Скобки не сбалансированны\n"); + } + + return 0; + +} diff --git a/5.Stack-and-Quene/Task_1/a.out b/5.Stack-and-Quene/Task_1/a.out new file mode 100755 index 0000000000000000000000000000000000000000..d80c904a2c0eeba9803885afc1f87b778e7fdb61 GIT binary patch literal 25448 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 literal 0 HcmV?d00001