Пример стека: проверка баланса скобок - EcsFlash/DataTypes GitHub Wiki

Исходный код - тут

Идея заключается в использовании стека для отслеживания открывающихся скобок. При обнаружении закрывающейся скобки проверяется, соответствует ли она последней открывающейся скобке в стеке. Если соответствие есть, то эти скобки считаются сбалансированными и удаляются из стека. Если соответствия нет или стек пуст, то выражение не сбалансировано. Проходясь по строке, я использую только два условия

  1. Я заношу все открывающиеся скобки в стек
if (str[i] == '(' || str[i] == '[' || str[i] == '{')
	stack.addElem(str[i]);
  1. Как только я встречаю открывающуюся скобку, начинаю ее сравнивать с последней скобкой в стеке, если она подходит, то удаляю скобку из стека и иди дальше. Так же я проверяю стек на пустоту(если стек пустой, то скобки не сбалансированы)
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;
}