From 7a50859bb4f871f93d4c636737a79318b04fdce9 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Mon, 22 Dec 2025 03:39:56 +0300 Subject: [PATCH 1/4] Stack implementation --- src/stack/stack.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/stack/stack.c diff --git a/src/stack/stack.c b/src/stack/stack.c new file mode 100644 index 0000000..e2e6315 --- /dev/null +++ b/src/stack/stack.c @@ -0,0 +1,53 @@ +#include +#include "stack.h" + +struct Stack { + int value; + struct Stack* next; +}; + +struct Stack* push(struct Stack* stack, int value) +{ + struct Stack* newStack = malloc(sizeof(struct Stack)); + + if (!newStack) + return NULL; + + newStack->value = value; + newStack->next = stack; + return newStack; +} + +struct Stack* pop(struct Stack* stack, int* value) +{ + if (stack == NULL) + return NULL; + + struct Stack* temp = stack->next; + *value = stack->value; + free(stack); + return temp; +} + +int peek(struct Stack* stack) +{ + if (stack == NULL) + return -1; + + return stack->value; +} + +struct Stack* new(void) +{ + return NULL; +} + +void delete(struct Stack* stack) +{ + while (stack != NULL) { + struct Stack* temp = stack; + stack = stack->next; + free(temp); + } +} + From d5f052989d51395b0ee1b48bc9475f73f40127c0 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Mon, 22 Dec 2025 03:40:19 +0300 Subject: [PATCH 2/4] Stack header file --- src/stack/stack.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/stack/stack.h diff --git a/src/stack/stack.h b/src/stack/stack.h new file mode 100644 index 0000000..6ca4716 --- /dev/null +++ b/src/stack/stack.h @@ -0,0 +1,18 @@ +#pragma once + +struct Stack; + +// Создает новый стек с NULL +struct Stack* new(void); + +// Кладет элемент на стек и возвращает измененный стек +struct Stack* push(struct Stack* stack, int value); + +// Берет элемент со стек, возвращает измененный стек, сохраняет удаленное значение в аргумент value +struct Stack* pop(struct Stack* stack); + +// Возвращает верхний элемент стека +int peek(struct Stack* stack); + +// Удаляет весь стек +void delete(struct Stack* stack); \ No newline at end of file From 41bf3725186aca9bd31aff992b01c6c545761df8 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Mon, 22 Dec 2025 04:44:05 +0300 Subject: [PATCH 3/4] Pop function get value --- src/stack/stack.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stack/stack.h b/src/stack/stack.h index 6ca4716..babbcde 100644 --- a/src/stack/stack.h +++ b/src/stack/stack.h @@ -9,7 +9,7 @@ struct Stack* new(void); struct Stack* push(struct Stack* stack, int value); // Берет элемент со стек, возвращает измененный стек, сохраняет удаленное значение в аргумент value -struct Stack* pop(struct Stack* stack); +struct Stack* pop(struct Stack* stack, int* value); // Возвращает верхний элемент стека int peek(struct Stack* stack); From 8809d8104f2396d3fd6c07e4df64a2bafaaedf58 Mon Sep 17 00:00:00 2001 From: Max Ipatov Date: Mon, 22 Dec 2025 04:44:56 +0300 Subject: [PATCH 4/4] Create extended braces balance --- src/23oct25/main.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/23oct25/main.c diff --git a/src/23oct25/main.c b/src/23oct25/main.c new file mode 100644 index 0000000..f228fd9 --- /dev/null +++ b/src/23oct25/main.c @@ -0,0 +1,47 @@ +#include +#include +#include +#include "../stack/stack.h" + +bool isBalanced(const char* str) { + struct Stack* stack = new(); + bool balanced = true; + + for (int i = 0; str[i] != '\0'; i++) { + char ch = str[i]; + if (ch == '(' || ch == '[' || ch == '{') { + stack = push(stack, ch); + } else if (ch == ')' || ch == ']' || ch == '}') { + if (stack == NULL) { + balanced = false; + break; + } + + int top; + stack = pop(stack, &top); + + if ((ch == ')' && top != '(') || (ch == ']' && top != '[') || (ch == '}' && top != '{')) { + balanced = false; + break; + } + } + } + + if (stack != NULL) { + balanced = false; + delete(stack); + } + + return balanced; +} + +int main(void) { + const char* tests[] = {"()", "[]", "{}", "({})", "({)}", "((()))", "([{}])", "}{", "(", ")", ""}; + int numTests = sizeof(tests) / sizeof(tests[0]); + + for (int i = 0; i < numTests; i++) { + printf("String: \"%s\" is %s\n", tests[i], isBalanced(tests[i]) ? "сбалансирована" : "не сбалансирована"); + } + + return 0; +}