Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }