栈和计算器-利用后缀表达式计算结果

规则:从左遍历后缀表达式

①如果是数字就入栈

②遇到运算符号,就出栈两个数

③进行运算,先出栈的数在右

public string GoResult() {
    int Length = this._laterString.GetListLength();
    if (Length <= 0) {
        Console.WriteLine("后缀表达式为空!");
        return "";
    }
            
    string e = "";
    //遍历整个后缀表达式
    for (int i = 1; i <= Length; i++) {
        this._laterString.GetElement(i, ref e);

        //如果为符号,出栈两个进行计算
        if (e == "+") {
            string termElement = "";
            this._midStack.Pop(ref termElement);
            double e1 = Double.Parse(termElement);

            this._midStack.Pop(ref termElement);
            double e2 = Double.Parse(termElement);

            double result = e2 + e1;
            this._midStack.Push(result.ToString());
            continue;
        }

        if (e == "-") {
            string termElement = "";
            this._midStack.Pop(ref termElement);
            double e1 = Double.Parse(termElement);

            this._midStack.Pop(ref termElement);
            double e2 = Double.Parse(termElement);

            double result = e2 - e1;
            this._midStack.Push(result.ToString());
            continue;
        }

        if (e == "*")
        {
            string termElement = "";
            this._midStack.Pop(ref termElement);
            double e1 = Double.Parse(termElement);

            this._midStack.Pop(ref termElement);
            double e2 = Double.Parse(termElement);

            double result = e2 * e1;
            this._midStack.Push(result.ToString());
            continue;
        }

        if (e == "/")
        {
            string termElement = "";
            this._midStack.Pop(ref termElement);
            double e1 = Double.Parse(termElement);

            this._midStack.Pop(ref termElement);
            double e2 = Double.Parse(termElement);

            if (e1 == 0) {
                Console.WriteLine("除数不能为0!");
                return "";
            }
            double result = e2 / e1;
            this._midStack.Push(result.ToString());
            continue;
        }

        //剩下为数字,入栈
        this._midStack.Push(e);
    }

    //栈中会留有一个元素,那就是结果了
    string r = "";
    this._midStack.Pop(ref r);
    return r;
}

首页 我的博客
粤ICP备17103704号