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

UptoLike

78
// определение функции перевода арифметического выражения
// в постфиксную форму
// str строка, содержащая исходное арифметическое выражение
// функция возвращает строку
// с постфиксной формой этого выражения
static string Postfix(string str)
{
Stack<char> s = new Stack<char>();
Queue<char> q = new Queue<char>();
char c;
// строка анализируется посимвольно
for(int i=0;i<str.Length; i++)
{
switch(str[i])
{
// если текущий символ – знак операции
case '+': case '-': case '*': case '/':
if(s.Count == 0)
// если стек пустой, помещаем
// символ операции в стек
s.Push(str[i]);
else
{
bool f = true;
с = s.Pop();
if(str[i] == '+' || str[i] == '-')
{
// если текущая операция '+' или '-',
// из стека в очередь перемещаются все
// знаки операций либо до достижения
// пустоты стека, либо до достижения
// символа '('
while(c != '(')
{
q.Enqueue(c);
if(s.Count != 0)
c = s.Pop();
else
{
f = false; break;
}
}
}
else
{
// если текущая операция '*' или '/',
// из стека в очередь перемещаются все
// знаки операций либо до достижения
// пустоты стека, либо до достижения
// символов '(', '+' или '-'
// определение функции перевода арифметического выражения
// в постфиксную форму
// str – строка, содержащая исходное арифметическое выражение
// функция возвращает строку
// с постфиксной формой этого выражения
static string Postfix(string str)
{
   Stack s = new Stack();
   Queue q = new Queue();
   char c;
   // строка анализируется посимвольно
   for(int i=0;i