规则:从左遍历后缀表达式
①如果是数字就入栈
②遇到运算符号,就出栈两个数
③进行运算,先出栈的数在右
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; }