Практикум по курсу "Объектно-ориентированное программирование" на языке C#. Андрианова А.А - 78 стр.

UptoLike

77
{
int el = 0;
// Пока i-тая очередь не пуста, извлекаем из нее числа
// и печатаем их. Когда очередь станет пустой, попытка
// извлечь элемент, приведет к возникновению
// исключительной ситуации, произойдет выход из цикла
try
{
while (true)
Console.WriteLine("" +
(int)numbers[i].Dequeue() + "\t");
}
catch (Exception e)
{
Console.WriteLine();
}
}
}
Классической задачей, использующей стеки и очереди, является задача
построения постфиксной формы арифметического выражения и его
вычисления.
Пусть дана символьная строка, содержащая правильно записанное
арифметическое выражение. Требуется написать функцию перевода
выражения в постфиксную форму. Постфиксной формой выражения
называется такая запись, в которой знак операции следует за операндами.
При этом она не содержит скобок. Например, постфиксная форма выражение
a * b имеет вид ab *, a * b+c вид ab * c +, a * (b + c) вид abc + *.
Для решения задачи можно использовать следующий алгоритм.
Рассматриваются поочередно все символы строки. В стек записывается
открывающая скобка, и выражение далее анализируется посимвольно слева
направо. Если встречается операнд (число или переменная), то он сразу
помещается в очередь. Если встречается открывающая скобка, то она
заносится в стек, а если встречается закрывающая скобка, то из стека
извлекаются находящиеся там знаки операций до ближайшей открывающей
скобки, которая также удаляется из стека. Все эти знаки в порядке их
извлечения помещаются в очередь. Когда же встречается знак операции, то
из стека извлекаются знаки операций, приоритет которых больше или равен
приоритету данной операции, и они помещаются в очередь, после чего
рассматриваемый знак переносится в стек. Когда выражение заканчивается,
выполняются такие же действия, что и при встрече закрывающей скобки.
Постфиксная форма выражения определяется путем извлечения всех
операндов и операций из очереди, а потом из стека.
         {
             int el = 0;
             // Пока i-тая очередь не пуста, извлекаем из нее числа
             // и печатаем их. Когда очередь станет пустой, попытка
             // извлечь элемент, приведет к возникновению
             // исключительной ситуации, произойдет выход из цикла
             try
             {
                 while (true)
                    Console.WriteLine("" +
                                      (int)numbers[i].Dequeue() + "\t");
             }
             catch (Exception e)
             {
                 Console.WriteLine();
             }
         }
     }

       Классической задачей, использующей стеки и очереди, является задача
построения постфиксной формы арифметического выражения и его
вычисления.
       Пусть дана символьная строка, содержащая правильно записанное
арифметическое выражение. Требуется написать функцию перевода
выражения в постфиксную форму. Постфиксной формой выражения
называется такая запись, в которой знак операции следует за операндами.
При этом она не содержит скобок. Например, постфиксная форма выражение
a * b имеет вид ab *, a * b+c – вид ab * c +, a * (b + c) – вид abc + *.
     Для решения задачи можно использовать следующий алгоритм.
Рассматриваются поочередно все символы строки. В стек записывается
открывающая скобка, и выражение далее анализируется посимвольно слева
направо. Если встречается операнд (число или переменная), то он сразу
помещается в очередь. Если встречается открывающая скобка, то она
заносится в стек, а если встречается закрывающая скобка, то из стека
извлекаются находящиеся там знаки операций до ближайшей открывающей
скобки, которая также удаляется из стека. Все эти знаки в порядке их
извлечения помещаются в очередь. Когда же встречается знак операции, то
из стека извлекаются знаки операций, приоритет которых больше или равен
приоритету данной операции, и они помещаются в очередь, после чего
рассматриваемый знак переносится в стек. Когда выражение заканчивается,
выполняются такие же действия, что и при встрече закрывающей скобки.
Постфиксная форма выражения определяется путем извлечения всех
операндов и операций из очереди, а потом из стека.

77