Пример стека: проверка баланса скобок - EcsFlash/DataTypes GitHub Wiki
тут
Исходный код -Идея заключается в использовании стека для отслеживания открывающихся скобок. При обнаружении закрывающейся скобки проверяется, соответствует ли она последней открывающейся скобке в стеке. Если соответствие есть, то эти скобки считаются сбалансированными и удаляются из стека. Если соответствия нет или стек пуст, то выражение не сбалансировано. Проходясь по строке, я использую только два условия
- Я заношу все открывающиеся скобки в стек
if (str[i] == '(' || str[i] == '[' || str[i] == '{')
stack.addElem(str[i]);
- Как только я встречаю открывающуюся скобку, начинаю ее сравнивать с последней скобкой в стеке, если она подходит, то удаляю скобку из стека и иди дальше. Так же я проверяю стек на пустоту(если стек пустой, то скобки не сбалансированы)
else if (str[i] == ')' || str[i] == '}' || str[i]==']')
{
if (stack.isEmpty())
return false;
else if ((stack.peek() == '(' && str[i] == ')') ||
(stack.peek() == '[' && str[i] == ']') ||
(stack.peek() == '{' && str[i] == '}'))
stack.removeElem();
else return false;
}