Язык С++ и программирование на нем. Рейзлин В.И. - 149 стр.

UptoLike

Составители: 

151
else q->next->next = q;
p = p->next;
}
q->next = NULL;
}
~stack () {reset ();}
void push (ETYPE c) { h = new elem (c, h); } // Поместить в
стек.
ETYPE pop () { elem *q = h; ETYPE a = h->data; // Извлечь из
стека.
h = h->next; delete q;
return a;
}
ETYPE pop_show () {return h->data;} // Показать вер-
шину.
void reset () { while (h ){ elem *q = h; h = h->next; delete q; }
}
int empty () { return h ? 0:1;}
};
// Конец файла stack.cpp
Приведем задачу, в решении которой удобно использовать стек.
В файле задана строка литер. Требуется проверить баланс скобок
в этой строке.
Баланс соблюдается, если выполнено каждое из следующих усло-
вий:
1) Для каждой открывающей скобки справа от нее есть соответ-
ствующая закрывающая скобка. Наоборот, для каждой закрывающей
скобки слева от нее есть соответствующая открывающая скобка.
2) Соответствующие пары скобок разных типов правильно вло-
жены друг в друга.
Так в строке
{[(a*b)+(n-4)]/[7-sin(x)]+exp(d)}*s
баланс скобок соблюдается, а в строке
[{a+b[i]((x-sin(x))]d)) – нет.
В качестве результата необходимо вывести сообщение о соблю-
дении баланса, а также начало строки до первого по порядку нарушения
баланса скобок.