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