Инфикс для постфиксного алгоритма

Я работал над алгоритмом для преобразования «a + b * c-d / e» в его постфиксную форму. Я готов http://en.wikipedia.org/wiki/Shunting-yard_algorithm Вики, но у меня проблемы с моей логикой. Когда я распечатываю свою очередь, я получаю «a b c d e» без операторов. Кажется, ничего не попадает в мой стек? Или, если это так, он не попадает в мою очередь. Моя очередь / стек реализуется классом двойных связанных списков, который я создал.

#include <iostream>
#include "LinkedList.h"#include "Stack.h"#include "Queue.h"using namespace std;

int oper(char c)
{
switch(c)    {
case '!':
return 4;
case '*':  case '/': case '%':
return 3;
case '+': case '-':
return 2;
case '=':
return 1;
}
return 0;
}int main () {

LinkedList* list = new LinkedList();string infix = "a+b*c-d/e";
Stack *holder = new Stack();
Queue *newstring = new Queue();
int length = infix.length();
char temp;
char prev;
for(int i=0; i<length; i++)
{
temp = infix[i];
if((temp == '+') || (temp == '-') || (temp == '*') || (temp == '/'))
{
if (holder->isEmpty())
{
holder->push(temp);
prev = temp;
continue;
}
if(oper(temp)<oper(prev))
{
newstring->queue(holder->popStack());
temp = '\0';
continue;
}
else
holder->push(temp);
prev = temp;
}
else
newstring->queue(temp);

}
while(!holder->isEmpty())
{
newstring->queue(holder->popStack());
}
newstring->printQueue();return 0;
}

0

Решение

ваш кодовый раздел ::

        if(oper(temp)<oper(prev))
{
newstring->queue(holder->popStack());
temp = '\0';
continue;
}

эта часть кода не получила никакого успеха ……
строка, представленная на входе «a + b * c-d / e»

видеть это ::

 if(oper(temp)<oper(prev))

условие состоит в том, чтобы проверять приоритет предыдущего оператора по отношению к сканируемому в данный момент оператору в переменной temp, но нет оператора вне предыдущего оператора if (условие, когда стек пуст), чтобы извлечь или присвоить переменную prev из доступных опций следовательно, в стеке начальное значение «+» используется для оценки условия if, которое меньше, чем «*» и «\», и ​​находится на том же уровне, что и «-», но в результате не превышает второе значение if условие никогда не будет удовлетворено и не получит удар.

Вероятно, именно поэтому, когда вы выталкиваете, ничего не выходит из стека, и именно так вы получаете свой текущий результат. вам нужно будет снова посетить код и внести соответствующие изменения.

надеюсь, это поможет, хорошего дня впереди.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]