ВУЗ:
Составители:
Рубрика:
Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
скобки, которая также удаляется из стека. Все эти знаки в
порядке их извлечения помещаются в очередь.
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
Страницы
- « первая
- ‹ предыдущая
- …
- 162
- 163
- 164
- 165
- 166
- …
- следующая ›
- последняя »
