Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
345bc50
Add stack library header file
NicholayShestakov Oct 14, 2025
4737d32
Add stack library realisation file
NicholayShestakov Oct 14, 2025
405bf4c
Update stack header file commentaries
NicholayShestakov Oct 14, 2025
ce89c99
Update stack realisation file
NicholayShestakov Oct 14, 2025
f4d1e69
Update stack realisation file
NicholayShestakov Oct 20, 2025
d389c7d
Update stack header file
NicholayShestakov Oct 20, 2025
ceeeb02
Update stack header file
NicholayShestakov Oct 21, 2025
f344512
Update stack realisation file
NicholayShestakov Oct 21, 2025
caa1bf9
Update stack header file
NicholayShestakov Oct 21, 2025
0d99e19
Update stack realisation file
NicholayShestakov Oct 21, 2025
7f111b6
Add advanced bracket balance homework
NicholayShestakov Oct 14, 2025
f70cccd
Update advanced bracket balance homework
NicholayShestakov Oct 16, 2025
a64578d
Update bracket balance checker
NicholayShestakov Oct 21, 2025
0af264a
Update bracket balance checker
NicholayShestakov Oct 21, 2025
41b1bd6
Add compile instruction for advanced bracket balance
NicholayShestakov Oct 22, 2025
3dea46b
Update .gitignore with adding ignoring CMake build directory
NicholayShestakov Nov 8, 2025
d73f226
Add CMakeLists.txt for build advanced bracket balance
NicholayShestakov Nov 8, 2025
ca828c1
Update instructions how to build
NicholayShestakov Nov 8, 2025
bce5889
Update stack realization
NicholayShestakov Dec 11, 2025
2526fa5
Update stack header documentation
NicholayShestakov Dec 11, 2025
8e759a7
Update stack header documentation
NicholayShestakov Dec 11, 2025
b243309
Update advanced bracket balance checker
NicholayShestakov Dec 11, 2025
1488ca0
Delete build instruction from stack folder
NicholayShestakov Dec 11, 2025
6b648f4
Add build instruction in README
NicholayShestakov Dec 11, 2025
96bb8d6
Add sorting station algorithm
NicholayShestakov Oct 22, 2025
b0d02b7
Add compile instruction for sorting station
NicholayShestakov Oct 22, 2025
7f7b0cd
Add CMakeLists.txt for build sorting station
NicholayShestakov Nov 8, 2025
e236b6c
Add compile flags for all executables
NicholayShestakov Dec 16, 2025
7bbf2c1
Update sorting station
NicholayShestakov Dec 11, 2025
da6c40c
Remove memory leaks
NicholayShestakov Dec 16, 2025
5c1ba87
Update final check for unclosed brackets
NicholayShestakov Dec 18, 2025
45be467
Delete build instruction from stack folder
NicholayShestakov Dec 18, 2025
bad6d60
Merge branch 'main' into advanced_bracket_balance_cmake
NicholayShestakov Dec 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
cmake_minimum_required(VERSION 3.25)
project(sorting_station C)
project(C_homework C)
add_compile_options(-Wall -Wextra -pedantic)

# Libraries
add_library(stack src/stack_and_queue/stack/stack.c)

# Executables and links with libraries
add_executable(advanced_bracket_balance src/stack_and_queue/stack/advanced_bracket_balance.c)
target_link_libraries(advanced_bracket_balance PRIVATE stack)

add_executable(sorting_station src/stack_and_queue/stack/sorting_station.c)
target_link_libraries(sorting_station PRIVATE stack)
target_compile_options(sorting_station PRIVATE -Wall -Wextra -pedantic)
71 changes: 71 additions & 0 deletions src/stack_and_queue/stack/advanced_bracket_balance.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#include "stack.h"
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>

bool isOpeningBracket(char c)
{
return (c == '(' || c == '[' || c == '{');
}

bool isClosingBracket(char c)
{
return (c == ')' || c == ']' || c == '}');
}

// Checks brackets balance.
// Returns true if brackets balanced and false if not.
// Takes string.
bool isBracketsBalanced(char* string)
{
int size = strlen(string);
Stack* brackets = newStack();

for (int i = 0; i < size; i++) {
if (isOpeningBracket(string[i])) {
push(brackets, string[i]);
}
if (isClosingBracket(string[i])) {
if (isEmpty(brackets)) {
deleteStack(brackets);
return false;
}

bool isClosed = false;
switch (pop(brackets)) {
case '(':
isClosed = string[i] == ')';
break;
case '[':
isClosed = string[i] == ']';
break;
case '{':
isClosed = string[i] == '}';
break;
}

if (!isClosed) {
deleteStack(brackets);
return false;
}
}
}

bool isAllClosed = isEmpty(brackets);
deleteStack(brackets);
return isAllClosed;
}

int main()
{
assert(isBracketsBalanced("T(e){s}[t]") && "Test failed.");
assert(isBracketsBalanced("123") && "Test failed.");
assert(isBracketsBalanced("") && "Test failed.");
assert(!isBracketsBalanced("(") && "Test failed.");
assert(!isBracketsBalanced("({a)}") && "Test failed.");
assert(isBracketsBalanced("((({{{[[[]]]}}})))") && "Test failed.");
printf("All tests successfully passed.\n");

return 0;
}