Объектно-ориентированное программирование на C++. Андрианова А.А - 164 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
скобки, которая также удаляется из стека. Все эти знаки в
порядке их извлечения помещаются в очередь.
4. Если встречается знак операции, то из стека извлекаются знаки
операций, приоритет которых больше или равен приоритету
данной операции, и они помещаются в очередь, после чего
рассматриваемый знак переносится в стек.
5. Когда выражение заканчивается, выполняются такие же
действия, что и при встрече закрывающей скобки.
Решение данной задачи оформлено в виде функции, в которой
используются объекты классов Stack и Queue и их методы.
// определение функции перевода арифметического выражения
// в постфиксную форму
// str – строка, содержащая исходное
// арифметическое выражение
// функция возвращает строку
// с постфиксной формой этого выражения
char* Postfix(char* str)
{
Stack s;
Queue q;
int i = 0;
char c;
// строка анализируется посимвольно
while(str[i] != '\0')
{
switch(str[i])
{
// если текущий символ – знак операции
case '+': case '-': case '*': case '/':
if(s.IsEmpty())
// если стек пустой, помещаем
// символ операции в стек
s.PushElement((int)str[i]);
else
{
bool f = true;
c = (char)s.PopElement();
if(str[i] == '+' || str[i] == '-')
{
// если текущая операция '+'
// или '-', из стека в очередь
// перемещаются все знаки
// операций либо до достижения
// пустоты стека, либо до
// достижения символа '('
164
                               Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
        скобки, которая также удаляется из стека. Все эти знаки в
        порядке их извлечения помещаются в очередь.
     4. Если встречается знак операции, то из стека извлекаются знаки
        операций, приоритет которых больше или равен приоритету
        данной операции, и они помещаются в очередь, после чего
        рассматриваемый знак переносится в стек.
     5. Когда выражение заканчивается, выполняются такие же
        действия, что и при встрече закрывающей скобки.
     Решение данной задачи оформлено в виде функции, в которой
используются объекты классов Stack и Queue и их методы.

      // определение функции перевода арифметического выражения
      // в постфиксную форму
      // str – строка, содержащая исходное
      // арифметическое выражение
      // функция возвращает строку
      // с постфиксной формой этого выражения
      char* Postfix(char* str)
      {
           Stack s;
           Queue q;
           int i = 0;
           char c;
           // строка анализируется посимвольно
           while(str[i] != '\0')
           {
             switch(str[i])
             {
                // если текущий символ – знак операции
                case '+': case '-': case '*': case '/':
                  if(s.IsEmpty())
                    // если стек пустой, помещаем
                     // символ операции в стек
                     s.PushElement((int)str[i]);
                  else
                  {
                     bool f = true;
                     c = (char)s.PopElement();
                     if(str[i] == '+' || str[i] == '-')
                     {
                       // если текущая операция '+'
                       // или '-', из стека в очередь
                       // перемещаются все знаки
                       // операций либо до достижения
                       // пустоты стека, либо до
                       // достижения символа '('


164