Beispiel #1
0
        private ContentElement[] ConvertToPostfixNotation(IEnumerable <ContentElement> input)
        {
            List <ContentElement>  outputSeparated = new List <ContentElement>();
            Stack <ContentElement> stack           = new Stack <ContentElement>();

            foreach (ContentElement c in input)
            {
                if (c.IsOperators())
                {
                    if (stack.Count > 0 && !c.IsOpenParenthesis())
                    {
                        if (c.IsCloseParenthesis())
                        {
                            ContentElement s = stack.Pop();
                            while (!s.IsOpenParenthesis())
                            {
                                outputSeparated.Add(s);
                                s = stack.Pop();
                            }
                        }
                        else if (!c.IsDegree())
                        {
                            if (c.GetPriority() > stack.Peek().GetPriority())
                            {
                                stack.Push(c);
                            }
                            else
                            {
                                while (stack.Count > 0 && c.GetPriority() <= stack.Peek().GetPriority())
                                {
                                    outputSeparated.Add(stack.Pop());
                                }
                                stack.Push(c);
                            }
                        }
                        else
                        {
                            stack.Push(c);
                        }
                    }
                    else
                    {
                        stack.Push(c);
                    }
                }
                else
                {
                    outputSeparated.Add(c);
                }
            }
            if (stack.Count > 0)
            {
                foreach (ContentElement c in stack)
                {
                    outputSeparated.Add(c);
                }
            }

            return(outputSeparated.ToArray());
        }