Ich muss Präfix mit einer Warteschlange (nicht Stack) auswerten. zum Beispiel:Präfix mit einer Warteschlange auswerten?
+ 3 * 2 1
is equivalent to 3+(2*1) = 5.
Ich denke durch die Warteschlange Schleife um über und über dequeue und enqueue verwenden. Wenn das Muster "operator" + "number" + "number" gefunden wird, wird es dreimal entfernt und das Ergebnis in die Warteschlange eingereiht, bis nur noch eine Zahl in der Warteschlange übrig ist.
while size(q)>1
if elements are in this pattern: an operator is followed by 2 numbers.
operator <--dequeue(q);
number1 <--dequeue(q);
number2 <--dequeue(q);
int a = apply(operator, number1, number2);
enqueue (q, a);
else if the element is a number or operator:
element <-- dequeue(q);
enqueue (q, element);
return dequeue(q);
Mein Algorithmus hat zwei Probleme:
- Operatoren und Zahlen sind zwei verschiedene Typen und müssen in einer Warteschlange gespeichert werden. Wie kann ich ein "+" in einer int-Warteschlange speichern?
- 2 3 + ist eine ungültige Eingabe, aber es wird schließlich 5 zurückgeben. 2 und 3 werden in die Warteschlange eingereiht, es wird + 2 3. Wenn die Eingabe ungültig ist, wie kann ich sie verhindern?
Vielen Dank
irgendwelche Hinweise für den besseren Algorithmus (kein Stapel)? –
von diesem Beitrag? http: //stackoverflow.com/questions/14912045/algorithm-to-evaluate-prefix-expression \ –
Haben Sie Schwierigkeiten, es zu verstehen? –