public bool IsBalanced(string str) { // проверка сбалансированности скобок StackExt <char> temp = new StackExt <char>(); for (int i = 0; i < str.Length; i++) { //встретили откр. скобку - внесли if (str[i] == '(') { temp.Push('('); } //иначе встретили закр. else { //если стек пуст, т.е. нет открывающих скобок - значит, не сбалансирован if (temp.count == 0) { return(false); } //если откр. скобка есть, то выталкиваем else { temp.Pop(); } } } // если стек пуст, т.е. не осталось откр. скобок - строка сбалансирована if (temp.Size() == 0) { return(true); } return(false); }
public int PostFix(string str) { // вычисление выражения в постфиксной записи для одноразрядных чисел StackExt <char> temp1 = new StackExt <char>(); StackExt <int> temp2 = new StackExt <int>(); int res = 0; // вносим в стек символы без пробелов for (int i = 0; i < str.Length; i++) { if (str[i] != ' ') { temp1.Push(str[i]); } } int n = temp1.Size(); // обход по стеку - просматриваем символ // если цифра - во второй стек; // если операция - выполняем, результат во второй стек for (int i = 0; i < n; i++) { char t = temp1.PopFirst(); if (char.IsNumber(t)) { temp2.Push((int)Char.GetNumericValue(t)); } else { if (t == '=') { res = temp2.PeekFirst(); } else { int n1 = temp2.Pop(); int n2 = temp2.Pop(); switch (t) { case '+': temp2.Push(n1 + n2); break; case '-': temp2.Push(n1 - n2); break; case '*': temp2.Push(n1 * n2); break; case '/': temp2.Push(n1 / n2); break; case '=': res = temp2.PeekFirst(); break; } } } } return(res); }