private static void GetValue2(ExpressionOperatorItem item, Stack<ExpressionOperatorItem> operatorStack, List<ExpressionItem> result) { if (!operatorStack.IsEmpty()) { do { ExpressionOperatorItem tmpItem = operatorStack.Pop(); if (item.Value.Priority > tmpItem.Value.Priority) //如果栈顶元素的优先级小于读取到的操作符 { operatorStack.Push(tmpItem); //将栈顶元素放回堆栈 operatorStack.Push(item); //将读取到的操作符放回堆栈 break; } else //如果栈顶元素的优先级比较高或者两者相等时 { result.Add(tmpItem); //将栈顶元素弹出,放入B中 if (operatorStack.IsEmpty()) { operatorStack.Push(item); //将读取到的操作符压入堆栈中 break; } } } while (!operatorStack.IsEmpty()); } else //如果堆栈为空,就把操作符放入堆栈中 { operatorStack.Push(item); } }
private static void GetValue(ExpressionOperatorItem item, Stack<ExpressionOperatorItem> operatorStack, List<ExpressionItem> result) { if (item.Value.ToString() == OperatorConst.LeftBracket) { //如果是'(',将它放入堆栈中 operatorStack.Push(item); } else if (item.Value.ToString() == OperatorConst.RightBracket) //如果是')' { while (!operatorStack.IsEmpty()) //不停地弹出堆栈中的内容,直到遇到'(' { var tmpItem = operatorStack.Pop(); if (tmpItem.Value.ToString() == OperatorConst.LeftBracket) { break; } else { result.Add(tmpItem); //将堆栈中弹出的内容放入B中 } } } else //既不是'(',也不是')',是其它操作符,比如+, -, *, /之类的 { GetValue2(item, operatorStack, result); } }