From ef7191bcec21d535431cf05003e474782c0f3ca5 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sat, 11 Oct 2025 22:13:31 +0300 Subject: [PATCH 01/21] Add stack.c and stack.h --- src/stack.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/stack.h | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 src/stack.c create mode 100644 src/stack.h diff --git a/src/stack.c b/src/stack.c new file mode 100644 index 0000000..cf7a771 --- /dev/null +++ b/src/stack.c @@ -0,0 +1,50 @@ +#include +#include "stack.h" + +struct StackNode { + int value; + struct StackNode* next; +}; + +struct Stack { + struct StackNode* head; +}; + +struct Stack newStack(void) +{ + struct Stack stack = { + .head = NULL + }; + return stack; +} + +void push(struct Stack* stack, int value) +{ + struct StackNode* node = malloc(sizeof(struct StackNode)); + node->value = value; + node->next = stack->head; + stack->head = node; +} + +int pop(struct Stack* stack) +{ + struct StackNode* oldNode = stack->head; + int res = oldNode->value; + stack->head = oldNode->next; + free(oldNode); + return res; +} + +int peek(struct Stack* stack) +{ + struct StackNode* headNode = stack->head; + int res = headNode->value; + return res; +} + +void deleteStack(struct Stack* stack) +{ + while (stack->head != NULL) { + pop(stack); + } +} diff --git a/src/stack.h b/src/stack.h new file mode 100644 index 0000000..9a9bb46 --- /dev/null +++ b/src/stack.h @@ -0,0 +1,41 @@ +#pragma once +/* + Функция создания "нового стека". + Ничего не принимает. + Ничего не возвращает. + Создает первый элемент в стеке без значения (value), ссылающийся на NULL + */ +struct Stack newStack(void); + + +/* + Функция, добавляющая новый элемент в стек. + Принимает указатель на последний элемент стека, куда пользователь хочет добавить новый элемент, и его значение типа int. + Ничего не возвращает. + */ +void push(struct Stack* stack, int value); + + +/* + Pop функция берет элемент из стека и возвращает его значение, + при этом элемент больше не находится в стеке. + На вход принимает указатель на последний элемент стека. + Пользователь должен проверить, что он не передает в функцию пустой стек. + */ +int pop(struct Stack* stack); + + +/* + Функция peek принимает на вход указатель на последний элемент стека, + возвращает значение, лежащее в последнем элементе стека. + */ +int peek(struct Stack* stack); + + +/* + Функция удаления стека (освобождения памяти). + На вход принимает указатель на последний элемент стека. + Ничего не возвращает. + Перебирает элементы стека и освобождает память, которую они занимают. + */ +void deleteStack(struct Stack* stack); From b6b1a3f582c8007f15045d2428f869278e8b91b8 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 14 Oct 2025 00:52:35 +0300 Subject: [PATCH 02/21] Slightly change stack.c and stack.h --- src/stack.c | 11 +---------- src/stack.h | 49 ++++++++++++++++++++++++++++--------------------- 2 files changed, 29 insertions(+), 31 deletions(-) diff --git a/src/stack.c b/src/stack.c index cf7a771..5a9c747 100644 --- a/src/stack.c +++ b/src/stack.c @@ -1,14 +1,5 @@ -#include #include "stack.h" - -struct StackNode { - int value; - struct StackNode* next; -}; - -struct Stack { - struct StackNode* head; -}; +#include struct Stack newStack(void) { diff --git a/src/stack.h b/src/stack.h index 9a9bb46..3945e82 100644 --- a/src/stack.h +++ b/src/stack.h @@ -1,41 +1,48 @@ #pragma once +// структура обыкновенного элемента в стеке +struct StackNode { + int value; + struct StackNode* next; +}; + +// сам стек (структура содержащая указатель на первый элемент стека) +struct Stack { + struct StackNode* head; +}; + /* - Функция создания "нового стека". - Ничего не принимает. - Ничего не возвращает. - Создает первый элемент в стеке без значения (value), ссылающийся на NULL + * Функция создания "нового стека". + * Ничего не принимает. + * Возвращает элемент типа struct Stack. + * Создает первый элемент в стеке без значения (value), ссылающийся на NULL */ struct Stack newStack(void); - /* - Функция, добавляющая новый элемент в стек. - Принимает указатель на последний элемент стека, куда пользователь хочет добавить новый элемент, и его значение типа int. - Ничего не возвращает. + * Функция, добавляющая новый элемент в стек. + * Принимает указатель на последний элемент стека, куда пользователь хочет добавить новый элемент, и его значение типа int. + * Ничего не возвращает. */ void push(struct Stack* stack, int value); - /* - Pop функция берет элемент из стека и возвращает его значение, - при этом элемент больше не находится в стеке. - На вход принимает указатель на последний элемент стека. - Пользователь должен проверить, что он не передает в функцию пустой стек. + * Pop функция берет элемент из стека и возвращает его значение, + * при этом элемент больше не находится в стеке. + * На вход принимает указатель на последний элемент стека. + * Пользователь должен проверить, что он не передает в функцию пустой стек. */ int pop(struct Stack* stack); - /* - Функция peek принимает на вход указатель на последний элемент стека, - возвращает значение, лежащее в последнем элементе стека. + * Функция peek принимает на вход указатель на последний элемент стека, + * возвращает значение, лежащее в последнем элементе стека. */ int peek(struct Stack* stack); - /* - Функция удаления стека (освобождения памяти). - На вход принимает указатель на последний элемент стека. - Ничего не возвращает. - Перебирает элементы стека и освобождает память, которую они занимают. + * Функция удаления стека (освобождения памяти). + * На вход принимает указатель на последний элемент стека. + * Ничего не возвращает. + * Перебирает элементы стека и освобождает память, которую они занимают. */ void deleteStack(struct Stack* stack); From 8eec1d6b322dd75829f506c68b14a029ead20c19 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 14 Oct 2025 00:54:21 +0300 Subject: [PATCH 03/21] Add advancedBracketBalance task --- src/advancedBracketBalance.c | 74 ++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/advancedBracketBalance.c diff --git a/src/advancedBracketBalance.c b/src/advancedBracketBalance.c new file mode 100644 index 0000000..34edd5c --- /dev/null +++ b/src/advancedBracketBalance.c @@ -0,0 +1,74 @@ +#include "stack.h" +#include +#include +#include + +bool checkBrackets(int counter, char* stringWithBrackets) +{ + if (counter == 0) { + return false; + } + struct Stack stack = newStack(); + char tmp = ' '; + for (int i = 0; i < counter; i++) { + tmp = stringWithBrackets[i]; + if ((tmp == '(') || (tmp == '{') || (tmp == '[')) { + push(&stack, tmp); + } + // если встретилась закрывающаяся и стек не пустой + else if ((tmp == ')' || tmp == '}' || tmp == ']') && (stack.head != NULL)) { + char previousBracket = pop(&stack); + // проверка скобок одного типа через номера из таблицы ASCII + + if ((previousBracket + 1 == tmp) || (previousBracket + 2 == tmp)) { + continue; + } else { + deleteStack(&stack); + return false; + } + } + // закрывающаяся и пустой стек + else if ((tmp == ')' || tmp == '}' || tmp == ']') && (stack.head == NULL)) { + deleteStack(&stack); + return false; + } + } + if ((stack.head) == NULL){ + deleteStack(&stack); + return true; + } + deleteStack(&stack); + return false; +} + +int main() +{ + // подразумеватся, что пользователь может ввести не только скобки и в кол-ве символов он должен указать + // всё кол-во символов включая скобки и не скобки. + int len = 0; + printf("Введите, сколько символов Вы хотите ввести, закончите ввод, нажав enter\n"); + printf("На следующей строке введите скобочную последовательность\n"); + ; + scanf("%d", &len); + // отловим этот '\n' + getchar(); + char* stringWithBrackets = malloc(len * sizeof(char)); + int counter = 0; + for (int i = 0; i < len; i++) { + char tmp = ' '; + scanf("%c", &tmp); + + if ((tmp == 40) || (tmp == 41) || (tmp == 91) || (tmp == 93) || (tmp == 123) || (tmp == 125)) { + stringWithBrackets[counter] = tmp; + ++counter; + } + } + bool isCorrect = checkBrackets(counter, stringWithBrackets); + if (isCorrect) { + printf("Скобочная последовательность правильная\n"); + } else { + printf("Скобочная последовательность неправильная или не было введено ни одной скобки\n"); + } + free(stringWithBrackets); + return 0; +} From 24094b307f1ea418c944abd288716b1fbcba8414 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 14 Oct 2025 19:02:47 +0300 Subject: [PATCH 04/21] Remove empty line --- src/advancedBracketBalance.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/advancedBracketBalance.c b/src/advancedBracketBalance.c index 34edd5c..78eb661 100644 --- a/src/advancedBracketBalance.c +++ b/src/advancedBracketBalance.c @@ -19,7 +19,6 @@ bool checkBrackets(int counter, char* stringWithBrackets) else if ((tmp == ')' || tmp == '}' || tmp == ']') && (stack.head != NULL)) { char previousBracket = pop(&stack); // проверка скобок одного типа через номера из таблицы ASCII - if ((previousBracket + 1 == tmp) || (previousBracket + 2 == tmp)) { continue; } else { @@ -48,7 +47,6 @@ int main() int len = 0; printf("Введите, сколько символов Вы хотите ввести, закончите ввод, нажав enter\n"); printf("На следующей строке введите скобочную последовательность\n"); - ; scanf("%d", &len); // отловим этот '\n' getchar(); From 00d5be02658341f2c1fa5df6e70f8bea1bee8ab3 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Fri, 24 Oct 2025 23:11:17 +0300 Subject: [PATCH 05/21] Removed struct realisation from h to c and fix some mistakes that this ation caused --- src/advancedBracketBalance.c | 122 ++++++++++++++++++----------------- src/stack.c | 68 ++++++++++--------- src/stack.h | 28 ++++---- 3 files changed, 115 insertions(+), 103 deletions(-) diff --git a/src/advancedBracketBalance.c b/src/advancedBracketBalance.c index 78eb661..b243544 100644 --- a/src/advancedBracketBalance.c +++ b/src/advancedBracketBalance.c @@ -3,70 +3,74 @@ #include #include -bool checkBrackets(int counter, char* stringWithBrackets) -{ - if (counter == 0) { - return false; +bool checkBrackets(int counter, char *stringWithBrackets) { + if (counter == 0) { + return false; + } + Stack *stack = newStack(); + char tmp = ' '; + for (int i = 0; i < counter; i++) { + tmp = stringWithBrackets[i]; + // проверка что стек не пустой + if ((tmp == '(') || (tmp == '{') || (tmp == '[')) { + push(stack, tmp); } - struct Stack stack = newStack(); - char tmp = ' '; - for (int i = 0; i < counter; i++) { - tmp = stringWithBrackets[i]; - if ((tmp == '(') || (tmp == '{') || (tmp == '[')) { - push(&stack, tmp); - } - // если встретилась закрывающаяся и стек не пустой - else if ((tmp == ')' || tmp == '}' || tmp == ']') && (stack.head != NULL)) { - char previousBracket = pop(&stack); - // проверка скобок одного типа через номера из таблицы ASCII - if ((previousBracket + 1 == tmp) || (previousBracket + 2 == tmp)) { - continue; - } else { - deleteStack(&stack); - return false; - } - } - // закрывающаяся и пустой стек - else if ((tmp == ')' || tmp == '}' || tmp == ']') && (stack.head == NULL)) { - deleteStack(&stack); - return false; - } + // если встретилась закрывающаяся и стек не пустой + else if ((tmp == ')' || tmp == '}' || tmp == ']') && (!isEmpty(stack))) { + char previousBracket = pop(stack); + // проверка скобок одного типа через номера из таблицы ASCII + + if ((previousBracket + 1 == tmp) || (previousBracket + 2 == tmp)) { + continue; + } else { + deleteStack(stack); + return false; + } } - if ((stack.head) == NULL){ - deleteStack(&stack); - return true; + // закрывающаяся и пустой стек + else if ((tmp == ')' || tmp == '}' || tmp == ']') && (isEmpty(stack))) { + deleteStack(stack); + return false; } - deleteStack(&stack); - return false; + } + if (isEmpty(stack)) { + deleteStack(stack); + return true; + } + deleteStack(stack); + return false; } -int main() -{ - // подразумеватся, что пользователь может ввести не только скобки и в кол-ве символов он должен указать - // всё кол-во символов включая скобки и не скобки. - int len = 0; - printf("Введите, сколько символов Вы хотите ввести, закончите ввод, нажав enter\n"); - printf("На следующей строке введите скобочную последовательность\n"); - scanf("%d", &len); - // отловим этот '\n' - getchar(); - char* stringWithBrackets = malloc(len * sizeof(char)); - int counter = 0; - for (int i = 0; i < len; i++) { - char tmp = ' '; - scanf("%c", &tmp); +int main() { + // подразумеватся, что пользователь может ввести не только скобки и в кол-ве + // символов он должен указать всё кол-во символов включая скобки и не скобки. + int len = 0; + printf("Введите, сколько символов Вы хотите ввести, закончите ввод, нажав " + "enter\n"); + printf("На следующей строке введите скобочную последовательность\n"); + ; + scanf("%d", &len); + // отловим этот '\n' + getchar(); + char *stringWithBrackets = malloc(len * sizeof(char)); + int counter = 0; + char tmp = ' '; + for (int i = 0; i < len; i++) { + scanf("%c", &tmp); - if ((tmp == 40) || (tmp == 41) || (tmp == 91) || (tmp == 93) || (tmp == 123) || (tmp == 125)) { - stringWithBrackets[counter] = tmp; - ++counter; - } - } - bool isCorrect = checkBrackets(counter, stringWithBrackets); - if (isCorrect) { - printf("Скобочная последовательность правильная\n"); - } else { - printf("Скобочная последовательность неправильная или не было введено ни одной скобки\n"); + if ((tmp == 40) || (tmp == 41) || (tmp == 91) || (tmp == 93) || + (tmp == 123) || (tmp == 125)) { + stringWithBrackets[counter] = tmp; + ++counter; } - free(stringWithBrackets); - return 0; + } + bool isCorrect = checkBrackets(counter, stringWithBrackets); + if (isCorrect) { + printf("Скобочная последовательность правильная\n"); + } else { + printf("Скобочная последовательность неправильная или не было введено ни " + "одной скобки\n"); + } + free(stringWithBrackets); + return 0; } diff --git a/src/stack.c b/src/stack.c index 5a9c747..4cfb867 100644 --- a/src/stack.c +++ b/src/stack.c @@ -1,41 +1,51 @@ #include "stack.h" +#include #include -struct Stack newStack(void) -{ - struct Stack stack = { - .head = NULL - }; - return stack; +// структура обыкновенного элемента в стеке +struct StackNode { + int value; + struct StackNode *next; +}; + +// сам стек (структура содержащая указатель на первый элемент стека) +struct Stack { + struct StackNode *head; +}; + +Stack *newStack(void) { + Stack *stack = calloc(1, sizeof(*stack)); + return stack; } -void push(struct Stack* stack, int value) -{ - struct StackNode* node = malloc(sizeof(struct StackNode)); - node->value = value; - node->next = stack->head; - stack->head = node; +void push(Stack *stack, int value) { + StackNode *node = malloc(sizeof(StackNode)); + node->value = value; + node->next = stack->head; + stack->head = node; } -int pop(struct Stack* stack) -{ - struct StackNode* oldNode = stack->head; - int res = oldNode->value; - stack->head = oldNode->next; - free(oldNode); - return res; +int pop(Stack *stack) { + if (stack->head == NULL) { + return '\0'; + } + StackNode *oldNode = stack->head; + int res = oldNode->value; + stack->head = oldNode->next; + free(oldNode); + return res; } -int peek(struct Stack* stack) -{ - struct StackNode* headNode = stack->head; - int res = headNode->value; - return res; +int peek(struct Stack *stack) { + StackNode *headNode = stack->head; + int res = headNode->value; + return res; } -void deleteStack(struct Stack* stack) -{ - while (stack->head != NULL) { - pop(stack); - } +bool isEmpty(Stack *stack) { return stack->head == NULL; } + +void deleteStack(Stack *stack) { + while (!isEmpty(stack)) { + pop(stack); + } } diff --git a/src/stack.h b/src/stack.h index 3945e82..b2b9363 100644 --- a/src/stack.h +++ b/src/stack.h @@ -1,29 +1,25 @@ #pragma once +#include + // структура обыкновенного элемента в стеке -struct StackNode { - int value; - struct StackNode* next; -}; +typedef struct StackNode StackNode; // сам стек (структура содержащая указатель на первый элемент стека) -struct Stack { - struct StackNode* head; -}; - +typedef struct Stack Stack; /* * Функция создания "нового стека". * Ничего не принимает. * Возвращает элемент типа struct Stack. * Создает первый элемент в стеке без значения (value), ссылающийся на NULL */ -struct Stack newStack(void); +Stack *newStack(void); /* * Функция, добавляющая новый элемент в стек. - * Принимает указатель на последний элемент стека, куда пользователь хочет добавить новый элемент, и его значение типа int. - * Ничего не возвращает. + * Принимает указатель на последний элемент стека, куда пользователь хочет + * добавить новый элемент, и его значение типа int. Ничего не возвращает. */ -void push(struct Stack* stack, int value); +void push(Stack *stack, int value); /* * Pop функция берет элемент из стека и возвращает его значение, @@ -31,13 +27,13 @@ void push(struct Stack* stack, int value); * На вход принимает указатель на последний элемент стека. * Пользователь должен проверить, что он не передает в функцию пустой стек. */ -int pop(struct Stack* stack); +int pop(Stack *stack); /* * Функция peek принимает на вход указатель на последний элемент стека, * возвращает значение, лежащее в последнем элементе стека. */ -int peek(struct Stack* stack); +int peek(Stack *stack); /* * Функция удаления стека (освобождения памяти). @@ -45,4 +41,6 @@ int peek(struct Stack* stack); * Ничего не возвращает. * Перебирает элементы стека и освобождает память, которую они занимают. */ -void deleteStack(struct Stack* stack); +void deleteStack(Stack *stack); + +bool isEmpty(Stack *stack); From aa47c619cc2932a094fea04d4e40fc7c2f3a120f Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sat, 25 Oct 2025 23:50:03 +0300 Subject: [PATCH 06/21] update stack version in more advanced one --- src/stack.c | 43 ++++++++++++++++++++++++++++++++----------- src/stack.h | 30 +++++++++++++++++------------- 2 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/stack.c b/src/stack.c index 5a9c747..4e7ea59 100644 --- a/src/stack.c +++ b/src/stack.c @@ -1,25 +1,41 @@ #include "stack.h" #include +#include -struct Stack newStack(void) + +// структура обыкновенного элемента в стеке +struct StackNode { + int value; + struct StackNode* next; +}; + +// сам стек (структура содержащая указатель на первый элемент стека) +struct Stack { + struct StackNode* head; +}; + + +Stack* newStack(void) { - struct Stack stack = { - .head = NULL - }; + Stack* stack = calloc(1, sizeof(*stack)); return stack; } -void push(struct Stack* stack, int value) +void push(Stack* stack, int value) { - struct StackNode* node = malloc(sizeof(struct StackNode)); + StackNode* node = malloc(sizeof(StackNode)); node->value = value; node->next = stack->head; stack->head = node; } -int pop(struct Stack* stack) +int pop(Stack* stack) { - struct StackNode* oldNode = stack->head; + if (stack->head==NULL) + { + return '\0'; + } + StackNode* oldNode = stack->head; int res = oldNode->value; stack->head = oldNode->next; free(oldNode); @@ -28,14 +44,19 @@ int pop(struct Stack* stack) int peek(struct Stack* stack) { - struct StackNode* headNode = stack->head; + StackNode* headNode = stack->head; int res = headNode->value; return res; } -void deleteStack(struct Stack* stack) +bool isEmpty(Stack* stack) +{ + return stack->head==NULL; +} + +void deleteStack(Stack* stack) { - while (stack->head != NULL) { + while (!isEmpty(stack)) { pop(stack); } } diff --git a/src/stack.h b/src/stack.h index 3945e82..19015b2 100644 --- a/src/stack.h +++ b/src/stack.h @@ -1,29 +1,25 @@ #pragma once +#include + // структура обыкновенного элемента в стеке -struct StackNode { - int value; - struct StackNode* next; -}; +typedef struct StackNode StackNode; // сам стек (структура содержащая указатель на первый элемент стека) -struct Stack { - struct StackNode* head; -}; - +typedef struct Stack Stack; /* * Функция создания "нового стека". * Ничего не принимает. * Возвращает элемент типа struct Stack. * Создает первый элемент в стеке без значения (value), ссылающийся на NULL */ -struct Stack newStack(void); +Stack* newStack(void); /* * Функция, добавляющая новый элемент в стек. * Принимает указатель на последний элемент стека, куда пользователь хочет добавить новый элемент, и его значение типа int. * Ничего не возвращает. */ -void push(struct Stack* stack, int value); +void push(Stack* stack, int value); /* * Pop функция берет элемент из стека и возвращает его значение, @@ -31,13 +27,13 @@ void push(struct Stack* stack, int value); * На вход принимает указатель на последний элемент стека. * Пользователь должен проверить, что он не передает в функцию пустой стек. */ -int pop(struct Stack* stack); +int pop(Stack* stack); /* * Функция peek принимает на вход указатель на последний элемент стека, * возвращает значение, лежащее в последнем элементе стека. */ -int peek(struct Stack* stack); +int peek(Stack* stack); /* * Функция удаления стека (освобождения памяти). @@ -45,4 +41,12 @@ int peek(struct Stack* stack); * Ничего не возвращает. * Перебирает элементы стека и освобождает память, которую они занимают. */ -void deleteStack(struct Stack* stack); +void deleteStack(Stack* stack); + + +/* + * функция проверяет, пустой ли список + * на вход принимает указатель на список + * возвращет булевое значение: true если список пустой, иначе false + */ +bool isEmpty(Stack* stack); From df951c6ac42eb1c0d312313f2aad92dc17a4edbb Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sun, 2 Nov 2025 10:21:09 +0300 Subject: [PATCH 07/21] Add cmake files, changed the file strusture. Now AdvBrBal task and stack is in AdvaBraBal dir --- .gitignore | 2 +- CMakeLists.txt | 5 +++++ src/AdvancedBracketBalance/CMakeLists.txt | 5 +++++ src/{ => AdvancedBracketBalance}/advancedBracketBalance.c | 0 src/{ => AdvancedBracketBalance}/stack.c | 0 src/{ => AdvancedBracketBalance}/stack.h | 0 6 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 CMakeLists.txt create mode 100644 src/AdvancedBracketBalance/CMakeLists.txt rename src/{ => AdvancedBracketBalance}/advancedBracketBalance.c (100%) rename src/{ => AdvancedBracketBalance}/stack.c (100%) rename src/{ => AdvancedBracketBalance}/stack.h (100%) diff --git a/.gitignore b/.gitignore index b48d248..ef3bbcf 100644 --- a/.gitignore +++ b/.gitignore @@ -54,5 +54,5 @@ modules.order Module.symvers Mkfile.old dkms.conf - +built # End of https://www.toptal.com/developers/gitignore/api/c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..17e4e67 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.25) + +project(C_Homework C) + +add_subdirectory(src/AdvancedBraketsBalance) diff --git a/src/AdvancedBracketBalance/CMakeLists.txt b/src/AdvancedBracketBalance/CMakeLists.txt new file mode 100644 index 0000000..117df23 --- /dev/null +++ b/src/AdvancedBracketBalance/CMakeLists.txt @@ -0,0 +1,5 @@ +add_library(stack stack.c) + +add_executable(advancedBracketsBalance advancedBracketsBalance.c) + +target_link_libraries(advancedBracketsBalance PRIVATE stack) diff --git a/src/advancedBracketBalance.c b/src/AdvancedBracketBalance/advancedBracketBalance.c similarity index 100% rename from src/advancedBracketBalance.c rename to src/AdvancedBracketBalance/advancedBracketBalance.c diff --git a/src/stack.c b/src/AdvancedBracketBalance/stack.c similarity index 100% rename from src/stack.c rename to src/AdvancedBracketBalance/stack.c diff --git a/src/stack.h b/src/AdvancedBracketBalance/stack.h similarity index 100% rename from src/stack.h rename to src/AdvancedBracketBalance/stack.h From 4f596e8b3248acbea5fdac49f5eebcda9b38ca68 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sun, 2 Nov 2025 10:28:04 +0300 Subject: [PATCH 08/21] Changed one letter in CMakelists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 17e4e67..2dd0a61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,4 +2,4 @@ cmake_minimum_required(VERSION 3.25) project(C_Homework C) -add_subdirectory(src/AdvancedBraketsBalance) +add_subdirectory(src/AdvancedBraketBalance) From 29c0959d9f0239f1ab8c85d1d426098f2557c004 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sun, 2 Nov 2025 10:29:30 +0300 Subject: [PATCH 09/21] Changed one more letter in CMakelists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2dd0a61..204c923 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,4 +2,4 @@ cmake_minimum_required(VERSION 3.25) project(C_Homework C) -add_subdirectory(src/AdvancedBraketBalance) +add_subdirectory(src/AdvancedBracketBalance) From 6917e2c3487b26a95b11fe095796781dd1d5a1e3 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sun, 2 Nov 2025 10:31:21 +0300 Subject: [PATCH 10/21] Changed and one more letter in CMakelists.txt --- src/AdvancedBracketBalance/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/AdvancedBracketBalance/CMakeLists.txt b/src/AdvancedBracketBalance/CMakeLists.txt index 117df23..a11a48b 100644 --- a/src/AdvancedBracketBalance/CMakeLists.txt +++ b/src/AdvancedBracketBalance/CMakeLists.txt @@ -1,5 +1,5 @@ add_library(stack stack.c) -add_executable(advancedBracketsBalance advancedBracketsBalance.c) +add_executable(advancedBracketBalance advancedBracketBalance.c) -target_link_libraries(advancedBracketsBalance PRIVATE stack) +target_link_libraries(advancedBracketBalance PRIVATE stack) From c68f8ae90c33841da26d353d4e16344a2f72829f Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sun, 2 Nov 2025 10:47:10 +0300 Subject: [PATCH 11/21] Revert "Changed one more letter in CMakelists.txt" This reverts commit 29c0959d9f0239f1ab8c85d1d426098f2557c004. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 204c923..2dd0a61 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,4 +2,4 @@ cmake_minimum_required(VERSION 3.25) project(C_Homework C) -add_subdirectory(src/AdvancedBracketBalance) +add_subdirectory(src/AdvancedBraketBalance) From 076cdddecf490b28be13c2f91731bc264c62e8e5 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sun, 2 Nov 2025 10:49:50 +0300 Subject: [PATCH 12/21] Changed one letter in CMake file --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2dd0a61..204c923 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,4 +2,4 @@ cmake_minimum_required(VERSION 3.25) project(C_Homework C) -add_subdirectory(src/AdvancedBraketBalance) +add_subdirectory(src/AdvancedBracketBalance) From b9f38cf7feb1e520238d1397ed0b282f595fc810 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Sun, 2 Nov 2025 12:23:34 +0300 Subject: [PATCH 13/21] Add flags in cMake file --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 204c923..f53d6d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,3 +3,5 @@ cmake_minimum_required(VERSION 3.25) project(C_Homework C) add_subdirectory(src/AdvancedBracketBalance) + +add_compile_options(-Wall -Wextra -Wpedantic) From ca673b6ab53ca1a0c8f7c439e468a4d120fbda60 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 25 Nov 2025 17:46:19 +0300 Subject: [PATCH 14/21] Add clang-format config --- .clang-format | 245 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..e2cbc59 --- /dev/null +++ b/.clang-format @@ -0,0 +1,245 @@ +--- +Language: Cpp +# BasedOnStyle: WebKit +AccessModifierOffset: -4 +AlignAfterOpenBracket: DontAlign +AlignArrayOfStructures: None +AlignConsecutiveAssignments: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveMacros: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveShortCaseStatements: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCaseColons: false +AlignEscapedNewlines: Right +AlignOperands: DontAlign +AlignTrailingComments: + Kind: Never + OverEmptyLines: 0 +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowBreakBeforeNoexceptSpecifier: Never +AllowShortBlocksOnASingleLine: Empty +AllowShortCaseLabelsOnASingleLine: false +AllowShortCompoundRequirementOnASingleLine: true +AllowShortEnumsOnASingleLine: true +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +AttributeMacros: + - __capability +BinPackArguments: true +BinPackParameters: true +BitFieldColonSpacing: Both +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterExternBlock: false + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakAdjacentStringLiterals: true +BreakAfterAttributes: Leave +BreakAfterJavaFieldAnnotations: false +BreakArrays: true +BreakBeforeBinaryOperators: All +BreakBeforeConceptDeclarations: Always +BreakBeforeBraces: WebKit +BreakBeforeInlineASMColon: OnlyMultiline +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeComma +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +ColumnLimit: 0 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: LogicalBlock +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: '(Test)?$' +IncludeIsMainSourceRegex: '' +IndentAccessModifiers: false +IndentCaseBlocks: false +IndentCaseLabels: false +IndentExternBlock: AfterExternBlock +IndentGotoLabels: true +IndentPPDirectives: None +IndentRequiresClause: true +IndentWidth: 4 +IndentWrappedFunctionNames: false +InsertBraces: false +InsertNewlineAtEOF: false +InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +KeepEmptyLinesAtEOF: false +LambdaBodyIndentation: Signature +LineEnding: DeriveLF +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: Inner +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 4 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PackConstructorInitializers: BinPack +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakScopeResolution: 500 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyIndentedWhitespace: 0 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +PPIndentWidth: -1 +QualifierAlignment: Leave +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: false +RemoveParentheses: Leave +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Leave +ShortNamespaceLines: 1 +SkipMacroDefinitionBody: false +SortIncludes: CaseSensitive +SortJavaStaticImport: Before +SortUsingDeclarations: LexicographicNumeric +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceAroundPointerQualifiers: Default +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeJsonColon: false +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDefinitionName: false + AfterFunctionDeclarationName: false + AfterIfMacros: true + AfterOverloadedOperator: false + AfterPlacementOperator: true + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: true +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInContainerLiterals: true +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParens: Never +SpacesInParensOptions: + InCStyleCasts: false + InConditionalStatements: false + InEmptyParentheses: false + Other: false +SpacesInSquareBrackets: false +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 8 +UseTab: Never +VerilogBreakBetweenInstancePorts: true +WhitespaceSensitiveMacros: + - BOOST_PP_STRINGIZE + - CF_SWIFT_NAME + - NS_SWIFT_NAME + - PP_STRINGIZE + - STRINGIZE +... \ No newline at end of file From 2ede7dada782066de2d88d1d96c2a50c20c29a63 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 25 Nov 2025 17:53:46 +0300 Subject: [PATCH 15/21] Fix mistakes in stack.h and stack.c --- src/stack.c | 14 +++++--------- src/stack.h | 29 ++++++++++++----------------- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/src/stack.c b/src/stack.c index 4e7ea59..93670a9 100644 --- a/src/stack.c +++ b/src/stack.c @@ -1,9 +1,10 @@ #include "stack.h" -#include #include - +#include // структура обыкновенного элемента в стеке +typedef struct StackNode StackNode; + struct StackNode { int value; struct StackNode* next; @@ -14,7 +15,6 @@ struct Stack { struct StackNode* head; }; - Stack* newStack(void) { Stack* stack = calloc(1, sizeof(*stack)); @@ -31,8 +31,7 @@ void push(Stack* stack, int value) int pop(Stack* stack) { - if (stack->head==NULL) - { + if (stack->head == NULL) { return '\0'; } StackNode* oldNode = stack->head; @@ -49,10 +48,7 @@ int peek(struct Stack* stack) return res; } -bool isEmpty(Stack* stack) -{ - return stack->head==NULL; -} +bool isEmpty(Stack* stack) { return stack->head == NULL; } void deleteStack(Stack* stack) { diff --git a/src/stack.h b/src/stack.h index 19015b2..6914c71 100644 --- a/src/stack.h +++ b/src/stack.h @@ -1,52 +1,47 @@ #pragma once #include -// структура обыкновенного элемента в стеке -typedef struct StackNode StackNode; - // сам стек (структура содержащая указатель на первый элемент стека) typedef struct Stack Stack; + /* * Функция создания "нового стека". * Ничего не принимает. - * Возвращает элемент типа struct Stack. - * Создает первый элемент в стеке без значения (value), ссылающийся на NULL + * Возвращает указатель на созданный стек. */ Stack* newStack(void); /* * Функция, добавляющая новый элемент в стек. - * Принимает указатель на последний элемент стека, куда пользователь хочет добавить новый элемент, и его значение типа int. + * Принимает указатель на стек и значение типа int * Ничего не возвращает. */ void push(Stack* stack, int value); /* - * Pop функция берет элемент из стека и возвращает его значение, - * при этом элемент больше не находится в стеке. - * На вход принимает указатель на последний элемент стека. - * Пользователь должен проверить, что он не передает в функцию пустой стек. + * Функция извлечения элемента из стека. + * Принимает указатель на стек + * Возвращает значение из вершины стека и удаляет элемент. */ int pop(Stack* stack); /* - * Функция peek принимает на вход указатель на последний элемент стека, - * возвращает значение, лежащее в последнем элементе стека. + * Функция peek принимает на вход указатель на стек, + * Возвращает значение из вершины стека */ int peek(Stack* stack); /* * Функция удаления стека (освобождения памяти). - * На вход принимает указатель на последний элемент стека. + * На вход принимает указатель на стек. * Ничего не возвращает. * Перебирает элементы стека и освобождает память, которую они занимают. */ void deleteStack(Stack* stack); - /* - * функция проверяет, пустой ли список - * на вход принимает указатель на список - * возвращет булевое значение: true если список пустой, иначе false + * функция проверяет, пустой ли стек + * на вход принимает указатель на стек + * возвращет булевое значение: true если стек пустой, иначе false */ bool isEmpty(Stack* stack); From 6a2b7e5844db3fdfaa71fb4fb3293272e2d1c8fd Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 25 Nov 2025 18:04:27 +0300 Subject: [PATCH 16/21] Fix other mistakes in stack.c add built in .gitignore --- .clang-format | 3 +-- .gitignore | 2 +- src/stack.c | 4 +--- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.clang-format b/.clang-format index e2cbc59..84ea374 100644 --- a/.clang-format +++ b/.clang-format @@ -241,5 +241,4 @@ WhitespaceSensitiveMacros: - CF_SWIFT_NAME - NS_SWIFT_NAME - PP_STRINGIZE - - STRINGIZE -... \ No newline at end of file + - STRINGIZE \ No newline at end of file diff --git a/.gitignore b/.gitignore index b48d248..ef3bbcf 100644 --- a/.gitignore +++ b/.gitignore @@ -54,5 +54,5 @@ modules.order Module.symvers Mkfile.old dkms.conf - +built # End of https://www.toptal.com/developers/gitignore/api/c diff --git a/src/stack.c b/src/stack.c index 93670a9..d2a54ad 100644 --- a/src/stack.c +++ b/src/stack.c @@ -31,9 +31,6 @@ void push(Stack* stack, int value) int pop(Stack* stack) { - if (stack->head == NULL) { - return '\0'; - } StackNode* oldNode = stack->head; int res = oldNode->value; stack->head = oldNode->next; @@ -55,4 +52,5 @@ void deleteStack(Stack* stack) while (!isEmpty(stack)) { pop(stack); } + free(stack); } From d0aa365c9a09c86af971cb6224f8231af2e5febf Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 25 Nov 2025 18:52:22 +0300 Subject: [PATCH 17/21] Fix advanced braket balance task --- .gitignore | 4 +- .../advancedBracketBalance.c | 104 +++++++----------- 2 files changed, 43 insertions(+), 65 deletions(-) diff --git a/.gitignore b/.gitignore index ef3bbcf..00ea720 100644 --- a/.gitignore +++ b/.gitignore @@ -46,7 +46,7 @@ *.idb *.pdb -# Kernel Module Compile Results +# Kernel Module Comspile Results *.mod* *.cmd .tmp_versions/ @@ -54,5 +54,5 @@ modules.order Module.symvers Mkfile.old dkms.conf -built +build # End of https://www.toptal.com/developers/gitignore/api/c diff --git a/src/AdvancedBracketBalance/advancedBracketBalance.c b/src/AdvancedBracketBalance/advancedBracketBalance.c index b243544..57a7d9c 100644 --- a/src/AdvancedBracketBalance/advancedBracketBalance.c +++ b/src/AdvancedBracketBalance/advancedBracketBalance.c @@ -2,75 +2,53 @@ #include #include #include +#include -bool checkBrackets(int counter, char *stringWithBrackets) { - if (counter == 0) { - return false; - } - Stack *stack = newStack(); - char tmp = ' '; - for (int i = 0; i < counter; i++) { - tmp = stringWithBrackets[i]; - // проверка что стек не пустой - if ((tmp == '(') || (tmp == '{') || (tmp == '[')) { - push(stack, tmp); - } - // если встретилась закрывающаяся и стек не пустой - else if ((tmp == ')' || tmp == '}' || tmp == ']') && (!isEmpty(stack))) { - char previousBracket = pop(stack); - // проверка скобок одного типа через номера из таблицы ASCII +bool checkBrackets(char* stringWithBrackets) +{ + bool isBalanced = true; + Stack* stack = newStack(); + char tmp = ' '; + int length = strlen(stringWithBrackets); + for (int i = 0; i < length; i++) { + tmp = stringWithBrackets[i]; + if ((tmp == '(') || (tmp == '{') || (tmp == '[')) { + push(stack, tmp); + } + // если встретилась закрывающаяся и стек не пустой + else if ((tmp == ')' || tmp == '}' || tmp == ']') && (!isEmpty(stack))) { + char previousBracket = pop(stack); + if ((previousBracket == '(' && tmp == ')') || (previousBracket == '[' && tmp == ']') || (previousBracket == '{' && tmp == '}')) { + continue; - if ((previousBracket + 1 == tmp) || (previousBracket + 2 == tmp)) { - continue; - } else { - deleteStack(stack); - return false; - } + } else { + isBalanced = false; + break; + } + } + // закрывающаяся и пустой стек + else if ((tmp == ')' || tmp == '}' || tmp == ']') && (isEmpty(stack))) { + isBalanced = false; + } } - // закрывающаяся и пустой стек - else if ((tmp == ')' || tmp == '}' || tmp == ']') && (isEmpty(stack))) { - deleteStack(stack); - return false; + if (!isEmpty(stack)) { + isBalanced = false; } - } - if (isEmpty(stack)) { deleteStack(stack); - return true; - } - deleteStack(stack); - return false; + return isBalanced; } -int main() { - // подразумеватся, что пользователь может ввести не только скобки и в кол-ве - // символов он должен указать всё кол-во символов включая скобки и не скобки. - int len = 0; - printf("Введите, сколько символов Вы хотите ввести, закончите ввод, нажав " - "enter\n"); - printf("На следующей строке введите скобочную последовательность\n"); - ; - scanf("%d", &len); - // отловим этот '\n' - getchar(); - char *stringWithBrackets = malloc(len * sizeof(char)); - int counter = 0; - char tmp = ' '; - for (int i = 0; i < len; i++) { - scanf("%c", &tmp); - - if ((tmp == 40) || (tmp == 41) || (tmp == 91) || (tmp == 93) || - (tmp == 123) || (tmp == 125)) { - stringWithBrackets[counter] = tmp; - ++counter; +int main() +{ + char* stringWithBrackets = malloc(1000 * sizeof(char)); + printf("Введите скобочную последовательность: "); + scanf("%s", stringWithBrackets); + bool isCorrect = checkBrackets(stringWithBrackets); + if (isCorrect) { + printf("Скобочная последовательность правильная\n"); + } else { + printf("Скобочная последовательность неправильная\n"); } - } - bool isCorrect = checkBrackets(counter, stringWithBrackets); - if (isCorrect) { - printf("Скобочная последовательность правильная\n"); - } else { - printf("Скобочная последовательность неправильная или не было введено ни " - "одной скобки\n"); - } - free(stringWithBrackets); - return 0; + free(stringWithBrackets); + return 0; } From b936d742eb2dcadf2e31a2c8fdcd67e7d23386f7 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 25 Nov 2025 19:11:25 +0300 Subject: [PATCH 18/21] Changed stack.h and main file just removed some empty spaces --- src/AdvancedBracketBalance/advancedBracketBalance.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/AdvancedBracketBalance/advancedBracketBalance.c b/src/AdvancedBracketBalance/advancedBracketBalance.c index 57a7d9c..348e280 100644 --- a/src/AdvancedBracketBalance/advancedBracketBalance.c +++ b/src/AdvancedBracketBalance/advancedBracketBalance.c @@ -20,7 +20,6 @@ bool checkBrackets(char* stringWithBrackets) char previousBracket = pop(stack); if ((previousBracket == '(' && tmp == ')') || (previousBracket == '[' && tmp == ']') || (previousBracket == '{' && tmp == '}')) { continue; - } else { isBalanced = false; break; From ab8c2c1dde3a0b6e8c7454d5819d50146f799814 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 25 Nov 2025 19:12:24 +0300 Subject: [PATCH 19/21] fix stack.h --- src/AdvancedBracketBalance/stack.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/AdvancedBracketBalance/stack.h b/src/AdvancedBracketBalance/stack.h index 6914c71..9a53d07 100644 --- a/src/AdvancedBracketBalance/stack.h +++ b/src/AdvancedBracketBalance/stack.h @@ -22,6 +22,8 @@ void push(Stack* stack, int value); * Функция извлечения элемента из стека. * Принимает указатель на стек * Возвращает значение из вершины стека и удаляет элемент. + * Ответственность за поведение программы при пустом стеке и попытке сделать + * к нему pop лежит на пользователе */ int pop(Stack* stack); From 83d19916173e97d01382ada8a9ca675a74199a87 Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 16 Dec 2025 20:29:49 +0300 Subject: [PATCH 20/21] tmp to ch comspile to compile added break on 31 line --- .gitignore | 2 +- .../advancedBracketBalance.c | 15 ++++++++------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 00ea720..6c4f36b 100644 --- a/.gitignore +++ b/.gitignore @@ -46,7 +46,7 @@ *.idb *.pdb -# Kernel Module Comspile Results +# Kernel Module Compile Results *.mod* *.cmd .tmp_versions/ diff --git a/src/AdvancedBracketBalance/advancedBracketBalance.c b/src/AdvancedBracketBalance/advancedBracketBalance.c index 348e280..4b82a20 100644 --- a/src/AdvancedBracketBalance/advancedBracketBalance.c +++ b/src/AdvancedBracketBalance/advancedBracketBalance.c @@ -8,17 +8,17 @@ bool checkBrackets(char* stringWithBrackets) { bool isBalanced = true; Stack* stack = newStack(); - char tmp = ' '; + char ch = ' '; int length = strlen(stringWithBrackets); for (int i = 0; i < length; i++) { - tmp = stringWithBrackets[i]; - if ((tmp == '(') || (tmp == '{') || (tmp == '[')) { - push(stack, tmp); + ch = stringWithBrackets[i]; + if ((ch == '(') || (ch == '{') || (ch == '[')) { + push(stack, ch); } // если встретилась закрывающаяся и стек не пустой - else if ((tmp == ')' || tmp == '}' || tmp == ']') && (!isEmpty(stack))) { + else if ((ch == ')' || ch == '}' || ch == ']') && (!isEmpty(stack))) { char previousBracket = pop(stack); - if ((previousBracket == '(' && tmp == ')') || (previousBracket == '[' && tmp == ']') || (previousBracket == '{' && tmp == '}')) { + if ((previousBracket == '(' && ch == ')') || (previousBracket == '[' && ch == ']') || (previousBracket == '{' && ch == '}')) { continue; } else { isBalanced = false; @@ -26,8 +26,9 @@ bool checkBrackets(char* stringWithBrackets) } } // закрывающаяся и пустой стек - else if ((tmp == ')' || tmp == '}' || tmp == ']') && (isEmpty(stack))) { + else if ((ch == ')' || ch == '}' || ch == ']') && (isEmpty(stack))) { isBalanced = false; + break; } } if (!isEmpty(stack)) { From d67a2dce00859aaad5ec1dceb6d5ab6fca52629c Mon Sep 17 00:00:00 2001 From: Yana Kalsina Date: Tue, 16 Dec 2025 20:31:11 +0300 Subject: [PATCH 21/21] ch now is new with every iteration --- src/AdvancedBracketBalance/advancedBracketBalance.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/AdvancedBracketBalance/advancedBracketBalance.c b/src/AdvancedBracketBalance/advancedBracketBalance.c index 4b82a20..fede744 100644 --- a/src/AdvancedBracketBalance/advancedBracketBalance.c +++ b/src/AdvancedBracketBalance/advancedBracketBalance.c @@ -8,10 +8,9 @@ bool checkBrackets(char* stringWithBrackets) { bool isBalanced = true; Stack* stack = newStack(); - char ch = ' '; int length = strlen(stringWithBrackets); for (int i = 0; i < length; i++) { - ch = stringWithBrackets[i]; + char ch = stringWithBrackets[i]; if ((ch == '(') || (ch == '{') || (ch == '[')) { push(stack, ch); }