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