| 

.NET C# Java Javascript Exception

2
Wie überführt man am Geschicktesten einen String, der in Infix Notation (3 + 4) vorliegt in eine Prefix-Notation (+ 3 4).
Es sollen folgende Rechenoperationen unterstützt werden +, -, *, /.
Die Programmiersprache ist C#
12.10.2009
Name 41 2
3 Antworten
2
Ein sehr eleganter Algorithmus, um algebraische Ausdrücke in Infix-Notation in einen Ausdruck in Postfix-Notation oder einen Abstrakten Syntax-Baum zu überführen, wurde von Edsger Wybe Dijkstra entwickelt und nennt sich Shunting-Yard-Algorithmus (Rangier-Bahnhof) nach der Art und Weise, wie die Operatoren und Operanden zwischen der Ausgabe-Queue und dem Operator-Stapel hin und her verschoben werden.

Der Shunting-Yard-Algorithmus sollte sich eigentlich recht einfach für Präfix-Notation anpassen lassen. Auf den ersten Blick sieht es so aus, als müsste man nur die Ausgabe-Queue "umdrehen", sprich einen Stapel statt einer Queue verwenden.

EDIT: Es stellt sich natürlich heraus, dass das ganze nicht so einfach ist. Eigentlich hätte ich das gleich sehen müssen, denn
  • Infix: a / b
  • Postfix: a b /
  • Präfix: / a b
Präfix-Notation ist also mitnichten einfach nur Postfix-Notation rückwärts. Es reicht also nicht, die Datenstruktur umzudrehen.
12.10.2009
Jörg W Mittag 571 2 4
1
Ich habe ein Beispiel gefunden, ist allerdings eine "Infix Notification to Reverse Polish Notification", was aber relativ leicht abzuändern ist (ist ja schließlich nur reversiert und muss daher nur getauscht werden).

Weiteres findest du hier und hier.

Ich hoffe, dass es das ist, was du suchst.
12.10.2009
Dustin Klein 2,9k 1 9
1
15.10.2009
DaSpors 4,1k 1 8
Hatten wir schon, nur ausführlicher von Jörg W Mittag :(
gfoidl 15.10.2009
Sorry wegen oben - hab nicht gesehen dass es ein Link zum Code ist. Entschuldige bitte.
gfoidl 15.10.2009
Hihihi...bin auch oft zu schnell mit solchen Kommentaren :)
DaSpors 16.10.2009

Stelle deine .net-Frage jetzt!