public static double EvaluatePostFixExpression(QueueUsingDoublyLinkedList <string> postfix) { StackUsingLinkedList <string> stack = new StackUsingLinkedList <string>(); var count = postfix.Count; double answer = 0; for (int i = 0; i < count; i++) { if (stack.Count >= 2 && postfix.Peek().Length == 1 && IsOperator(postfix.Peek()[0]) == true) { double x = 0; double y = 0; if (Double.TryParse(stack.Peek(), out x)) { x = Convert.ToDouble(stack.Pop()); } if (Double.TryParse(stack.Peek(), out y)) { y = Convert.ToDouble(stack.Pop()); } double result = Calculate(y, postfix.Dequeue()[0], x); stack.Push(result.ToString()); } else { stack.Push(postfix.Dequeue()); } } if (stack.Count != 0) { if (double.TryParse(stack.Peek(), out answer) == true) { answer = Convert.ToDouble(stack.Pop()); } else { if (stack.Count != 1) { stack.Pop(); } if (double.TryParse(stack.Peek(), out answer) == true) { answer = Convert.ToDouble(stack.Pop()); } } } return(answer); }