From bb1be3c46bccbd2ad73879607b158b8bc08f6240 Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 16 Oct 2025 23:52:21 +0300 Subject: [PATCH 01/10] Add .c file with stack --- src/stack/stack.c | 81 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 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..b974dbe --- /dev/null +++ b/src/stack/stack.c @@ -0,0 +1,81 @@ +#include "stack.h" +#include +#include + +// создание пустого стека +Stack* stack_new(void) { + Stack* stack = (Stack*)malloc(sizeof(Stack)); + if (stack != NULL) { + stack->top = NULL; + } + return stack; +} + +// добавление элемента на стек +int stack_push(Stack* stack, int value) { + if (stack == NULL) { + printf("Stack is NULL!\n"); + return -1; + } + + // создаем новый узел + Node* new_node = (Node*)malloc(sizeof(Node)); + if (new_node == NULL) { + printf("Memory failed!\n"); + return -1; + } + + // заполняем узел + new_node->data = value; + new_node->next = stack->top; + + // обновляем вершину стека + stack->top = new_node; +} + +// взятие элемента со стека +int stack_pop(Stack* stack) { + if (stack == NULL || stack->top == NULL) { + printf("Stack is empty!\n"); + return -1; + } + + // сохраняем данные из вершины + Node* temp = stack->top; + int value = temp->data; + + // перемещаем вершину на следующий элемент + stack->top = stack->top->next; + + // освобождаем память удаляемого узла + free(temp); + + return value; +} + +// просмотр элемента на вершине стека +int stack_peek(Stack* stack) { + if (stack == NULL || stack->top == NULL) { + printf("Stack is empty!\n"); + return -1; + } + + return stack->top->data; +} + +// удаление всего стека и освобождение памяти +void stack_delete(Stack* stack) { + if (stack == NULL) { + return; + } + + // освобождаем все узлы + while (stack->top != NULL) { + Node* temp = stack->top; + stack->top = stack->top->next; + free(temp); + } + + // освобождаем саму структуру стека + free(stack); +} \ No newline at end of file From 9283e17122827ea97373dcab073aeff1077f9bcd Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 16 Oct 2025 23:52:30 +0300 Subject: [PATCH 02/10] Add .h file with stack --- src/stack/stack.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 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..08fee91 --- /dev/null +++ b/src/stack/stack.h @@ -0,0 +1,29 @@ +#ifndef STACK_H +#define STACK_H + +#include + +// максимальный размер стека +#define STACK_MAX_SIZE 100 + +// структура узла стека +typedef struct Node { + int data; // целочисленные данные + struct Node* next; // указатель на следующий узел +} Node; + +// структура стека +typedef struct { + Node* top; // указатель на вершину стека +} Stack; + +// основные операции +int stack_push(Stack* stack, int value); // положить элемент на стек +int stack_pop(Stack* stack); // взять элемент со стека +int stack_peek(Stack* stack); // посмотреть на элемент на вершине стека + +// служебные функции +Stack* stack_new(void); // создать пустой стек +void stack_delete(Stack* stack); // удалить весь стек (освободить память) + +#endif \ No newline at end of file From 97cd461463736b880ac9dccb7ef664db57d97d07 Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 16 Oct 2025 23:55:10 +0300 Subject: [PATCH 03/10] Add .c file with homework --- src/hw_5-1_proBrackets/hw_5-1_proBrackets.c | 50 +++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/hw_5-1_proBrackets/hw_5-1_proBrackets.c diff --git a/src/hw_5-1_proBrackets/hw_5-1_proBrackets.c b/src/hw_5-1_proBrackets/hw_5-1_proBrackets.c new file mode 100644 index 0000000..7324cc1 --- /dev/null +++ b/src/hw_5-1_proBrackets/hw_5-1_proBrackets.c @@ -0,0 +1,50 @@ +#include +#include +#include "stack\stack.h" +#include "hw_5-2_sortStation\hw_5-2_sortStation.h" + +int isValidBrackets(char originalString[]){ + Stack* bracketsStack = stack_new(); + + for (int i = 0; i < strlen(originalString); i++) { + char s = originalString[i]; + + if ((s == '(') || (s == '{') || (s == '[')) { + stack_push(bracketsStack, s); + + } else if ((s == ')' && bracketsStack == NULL) || + (s == '}' && bracketsStack == NULL) || + (s == ']' && bracketsStack == NULL)) { + //printf("String doesn't follow rules.\n"); + return 0; + + } else if ((s == ')' && stack_peek(bracketsStack) == '(') || + (s == '}' && stack_peek(bracketsStack) == '{') || + (s == ']' && stack_peek(bracketsStack) == '[')) { + stack_pop(bracketsStack); + + } else { + //printf("String doesn't follow rules.\n"); + return 0; + } + } + if (bracketsStack != NULL && bracketsStack->top != NULL) { + //printf("String doesn't follow rules.\n"); + return 0; + } + //printf("Balance of brackets is keep.\n"); + return 1; +} + +int main(void) +{ + char originalString[100]; + scanf("%99s", originalString); + int result = isValidBrackets(originalString); + if (result == 0) { + printf("String doesn't follow rules.\n"); + return -1; + } + printf("Balance of brackets is keep.\n"); + return 0; +} From 3e06a673b1783f6753804f7190806458dbbdfe3b Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 16 Oct 2025 23:55:18 +0300 Subject: [PATCH 04/10] Add .h file with homework --- src/hw_5-1_proBrackets/hw_5-1_proBrackets.h | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/hw_5-1_proBrackets/hw_5-1_proBrackets.h diff --git a/src/hw_5-1_proBrackets/hw_5-1_proBrackets.h b/src/hw_5-1_proBrackets/hw_5-1_proBrackets.h new file mode 100644 index 0000000..d03d442 --- /dev/null +++ b/src/hw_5-1_proBrackets/hw_5-1_proBrackets.h @@ -0,0 +1,10 @@ +#ifndef PROBRACKETS_H +#define PROBRACKETS_H + +// проверка корректности расстановки скобок +int isValidBrackets(char originalString[]); + +// ввод данных и вывод результата +int main(void); + +#endif \ No newline at end of file From 021ec94fa776203c64c49b0fc340791b82f53aba Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 16 Oct 2025 23:55:38 +0300 Subject: [PATCH 05/10] Add build instruction --- src/hw_5-1_proBrackets/instruction.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/hw_5-1_proBrackets/instruction.md diff --git a/src/hw_5-1_proBrackets/instruction.md b/src/hw_5-1_proBrackets/instruction.md new file mode 100644 index 0000000..e321593 --- /dev/null +++ b/src/hw_5-1_proBrackets/instruction.md @@ -0,0 +1,17 @@ +# Инструкция по сборке + +Домашнее задание 5.1 Продвинутый баланс скобок + +1. Откройте терминал и перейдите в директорию с файлами приложения (hw_5-1_proBrackets) +2. Выполните команду компиляции: +```console +gcc hw_5-1_proBrackets.c ../stack/stack.c -I.. -o hw_5-1_proBrackets +``` +3. Запустите программу: +```console +./hw_5-1_proBrackets +``` +### Использование +1. Введите строку, состоящую из скобок (не более 100 чисел) +2. Нажмите Enter для завершения ввода +3. Программа выведет, корректно ли расположение скобок \ No newline at end of file From 54b2770e96e4289e4ab21eccb9f57146bcda0d0e Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 23 Oct 2025 22:09:27 +0300 Subject: [PATCH 06/10] Updated stack.c with names changes according to WebKit --- src/stack/stack.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/stack/stack.c b/src/stack/stack.c index b974dbe..caec476 100644 --- a/src/stack/stack.c +++ b/src/stack/stack.c @@ -3,7 +3,7 @@ #include // создание пустого стека -Stack* stack_new(void) { +Stack* stackNew(void) { Stack* stack = (Stack*)malloc(sizeof(Stack)); if (stack != NULL) { stack->top = NULL; @@ -12,7 +12,7 @@ Stack* stack_new(void) { } // добавление элемента на стек -int stack_push(Stack* stack, int value) { +int stackPush(Stack* stack, int value) { if (stack == NULL) { printf("Stack is NULL!\n"); return -1; @@ -34,7 +34,7 @@ int stack_push(Stack* stack, int value) { } // взятие элемента со стека -int stack_pop(Stack* stack) { +int stackPop(Stack* stack) { if (stack == NULL || stack->top == NULL) { printf("Stack is empty!\n"); return -1; @@ -54,7 +54,7 @@ int stack_pop(Stack* stack) { } // просмотр элемента на вершине стека -int stack_peek(Stack* stack) { +int stackPeek(Stack* stack) { if (stack == NULL || stack->top == NULL) { printf("Stack is empty!\n"); return -1; @@ -64,7 +64,7 @@ int stack_peek(Stack* stack) { } // удаление всего стека и освобождение памяти -void stack_delete(Stack* stack) { +void stackDelete(Stack* stack) { if (stack == NULL) { return; } From a3a5e6de1b9ea18b840504042404de93fa92b1d3 Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 23 Oct 2025 22:09:37 +0300 Subject: [PATCH 07/10] Updated stack.h with names changes according to WebKit --- src/stack/stack.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/stack/stack.h b/src/stack/stack.h index 08fee91..7951dc1 100644 --- a/src/stack/stack.h +++ b/src/stack/stack.h @@ -18,12 +18,12 @@ typedef struct { } Stack; // основные операции -int stack_push(Stack* stack, int value); // положить элемент на стек -int stack_pop(Stack* stack); // взять элемент со стека -int stack_peek(Stack* stack); // посмотреть на элемент на вершине стека +int stackPush(Stack* stack, int value); // положить элемент на стек +int stackPop(Stack* stack); // взять элемент со стека +int stackPeek(Stack* stack); // посмотреть на элемент на вершине стека // служебные функции -Stack* stack_new(void); // создать пустой стек -void stack_delete(Stack* stack); // удалить весь стек (освободить память) +Stack* stackNew(void); // создать пустой стек +void stackDelete(Stack* stack); // удалить весь стек (освободить память) #endif \ No newline at end of file From 66bdad9e9ba8a6166d5663393894d4a900b98884 Mon Sep 17 00:00:00 2001 From: ada1ra Date: Thu, 23 Oct 2025 22:29:21 +0300 Subject: [PATCH 08/10] Updated hw_5-1_proBrackets.c with names changes according to WebKit --- src/hw_5-1_proBrackets/hw_5-1_proBrackets.c | 34 ++++++++++----------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/hw_5-1_proBrackets/hw_5-1_proBrackets.c b/src/hw_5-1_proBrackets/hw_5-1_proBrackets.c index 7324cc1..a6225ff 100644 --- a/src/hw_5-1_proBrackets/hw_5-1_proBrackets.c +++ b/src/hw_5-1_proBrackets/hw_5-1_proBrackets.c @@ -1,38 +1,35 @@ +#include "hw_5-1_proBrackets/hw_5-1_proBrackets.h" +#include "stack/stack.h" #include #include -#include "stack\stack.h" -#include "hw_5-2_sortStation\hw_5-2_sortStation.h" -int isValidBrackets(char originalString[]){ - Stack* bracketsStack = stack_new(); +int isValidBrackets(char originalString[]) +{ + Stack* bracketsStack = stackNew(); for (int i = 0; i < strlen(originalString); i++) { char s = originalString[i]; - + if ((s == '(') || (s == '{') || (s == '[')) { - stack_push(bracketsStack, s); - - } else if ((s == ')' && bracketsStack == NULL) || - (s == '}' && bracketsStack == NULL) || - (s == ']' && bracketsStack == NULL)) { - //printf("String doesn't follow rules.\n"); + stackPush(bracketsStack, s); + + } else if ((s == ')' && bracketsStack == NULL) + || (s == '}' && bracketsStack == NULL) + || (s == ']' && bracketsStack == NULL)) { return 0; - } else if ((s == ')' && stack_peek(bracketsStack) == '(') || - (s == '}' && stack_peek(bracketsStack) == '{') || - (s == ']' && stack_peek(bracketsStack) == '[')) { - stack_pop(bracketsStack); + } else if ((s == ')' && stackPeek(bracketsStack) == '(') + || (s == '}' && stackPeek(bracketsStack) == '{') + || (s == ']' && stackPeek(bracketsStack) == '[')) { + stackPop(bracketsStack); } else { - //printf("String doesn't follow rules.\n"); return 0; } } if (bracketsStack != NULL && bracketsStack->top != NULL) { - //printf("String doesn't follow rules.\n"); return 0; } - //printf("Balance of brackets is keep.\n"); return 1; } @@ -41,6 +38,7 @@ int main(void) char originalString[100]; scanf("%99s", originalString); int result = isValidBrackets(originalString); + if (result == 0) { printf("String doesn't follow rules.\n"); return -1; From 2f1c32175fe76a23a0380601addc57d85ad18d27 Mon Sep 17 00:00:00 2001 From: Ada Date: Tue, 18 Nov 2025 01:06:22 +0300 Subject: [PATCH 09/10] Rename instruction.md to README.md --- src/hw_5-1_proBrackets/{instruction.md => README.md} | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename src/hw_5-1_proBrackets/{instruction.md => README.md} (93%) diff --git a/src/hw_5-1_proBrackets/instruction.md b/src/hw_5-1_proBrackets/README.md similarity index 93% rename from src/hw_5-1_proBrackets/instruction.md rename to src/hw_5-1_proBrackets/README.md index e321593..af2091a 100644 --- a/src/hw_5-1_proBrackets/instruction.md +++ b/src/hw_5-1_proBrackets/README.md @@ -14,4 +14,5 @@ gcc hw_5-1_proBrackets.c ../stack/stack.c -I.. -o hw_5-1_proBrackets ### Использование 1. Введите строку, состоящую из скобок (не более 100 чисел) 2. Нажмите Enter для завершения ввода -3. Программа выведет, корректно ли расположение скобок \ No newline at end of file + +3. Программа выведет, корректно ли расположение скобок From 3444d8cd10ecadc51ce66204b31f2b3a22841f93 Mon Sep 17 00:00:00 2001 From: Ada Date: Tue, 18 Nov 2025 01:07:47 +0300 Subject: [PATCH 10/10] Update README.md --- src/hw_5-1_proBrackets/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hw_5-1_proBrackets/README.md b/src/hw_5-1_proBrackets/README.md index af2091a..374d136 100644 --- a/src/hw_5-1_proBrackets/README.md +++ b/src/hw_5-1_proBrackets/README.md @@ -12,7 +12,8 @@ gcc hw_5-1_proBrackets.c ../stack/stack.c -I.. -o hw_5-1_proBrackets ./hw_5-1_proBrackets ``` ### Использование -1. Введите строку, состоящую из скобок (не более 100 чисел) +1. Введите строку, состоящую из скобок (не более 100 символов) 2. Нажмите Enter для завершения ввода 3. Программа выведет, корректно ли расположение скобок +