static string ToPostfix(string input) { string result = ""; //Stack<char> stack = new Stack<char>(); MyStack <char> stack = new MyStack <char>(); //Queue<char> queue = new Queue<char>(); MyQueue <char> queue = new MyQueue <char>(); for (int i = 0; i < input.Length; i++) { if (isDigit(input[i])) // Если входящий элемент число { queue.Enqueue(input[i]); // то добавляем его в очередь } else if (isOperator(input[i])) // Если входящий элемент оператор (+, -, *, /) то проверяем { if ((stack.Count == 0) || (stack.Peek() == '(')) // Если стек пуст или содержит левую скобку в вершине { stack.Push(input[i]); // то добавляем входящий оператор в стек } else if (CompareRank(input[i], stack.Peek()) > 0) // Если входящий оператор имеет более высокий приоритет чем вершина { stack.Push(input[i]); // поместить его в стек } else // Если входящий оператор имеет более низкий или равный приоритет, чем вершина { do { // выгружаем из стэка в очередь queue.Enqueue(stack.Pop()); } // пока не увидим оператор с меньшим приоритетом или левую скобку на вершине while ((stack.Count > 0) && (stack.Peek() != '(') && (CompareRank(input[i], stack.Peek()) >= 0)); stack.Push(input[i]); // затем добавить входящий оператор в стек } } else if (input[i] == '(') // Если входящий элемент является левой скобкой { stack.Push(input[i]); // поместить его в стек } else if (input[i] == ')') // Если входящий элемент является правой скобкой { while (stack.Peek() != '(') // то пока не увидим левую скобку { queue.Enqueue(stack.Pop()); // выгружаем стек и добавляем его элементы в очередь } stack.Pop(); // Удалить найденную скобку из стека } } // В конце выражения выгрузить стек в очередь while (stack.Count > 0) { queue.Enqueue(stack.Pop()); } // и очередь в строку while (queue.Count > 0) { result += queue.Dequeue(); } return(result); }
static void Task06() { //Реализовать очередь с использованием массива. //Пример использования созданной очереди MyQueue <int> myQueue = new MyQueue <int>(5); for (int i = 0; i < 7; i++) { myQueue.Enqueue(i + 1); } for (int i = 0; i < 3; i++) { myQueue.Dequeue(); } for (int i = 0; i < 5; i++) { myQueue.Enqueue(i + 10); } FC.Pause(); }