Postfix-notation-Validierung?
Was wäre ein guter Weg, um bewerten zu string(array, etwas) enthält, die einen postfix-Ausdruck(ex: 3 5 +), um die Gültigkeit überprüfen?
- Bitte genauer, was du meinst, von 'gültig' oder 'ungültig', vielleicht mit Beispielen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gehe ich davon aus, dass hier, was meinst du gültig ist, dass die Ausführung des code wird nie Unterlauf stack und verlassen ein einziger Wert auf dem stack. Wenn Sie einen strengeren Begriff der Gültigkeit, müssen Sie eine mehr anspruchsvolle checker.
Wenn Sie möchten, zu prüfen, diese Art von Gültigkeit, es ist nicht notwendig, um zu bewerten die Zeichenfolge, und Sie können verwenden Sie einen Zähler, kein stack. Der Zähler verfolgt die Anzahl der Werte, die wäre auf den Stapel, wenn Sie ausgewertet. Zur Vereinfachung, nehmen wir an, Sie haben nur Literale, binäre Operatoren, und unäre Operatoren. Dieser Algorithmus verwendet eine spezielle Dekrement Betrieb: wenn Sie den Dekrement-Zähler, der geht unter null, ist der string ungültig ist:
[2, +, 2]
wäre gültig.Algorithmus: pflegen einen Stapel zu Scannen und die
postfix-Ausdruck von Links nach rechts
– Wenn das element eine Zahl ist, drücken Sie ihn in die
stack
– Wenn das element ein operator O, pop-zweimal
und erhalten A und B jeweils. Berechnen
BOA, und schieben Sie es wieder auf den Stapel
– Wenn der Ausdruck beendet ist, wird die Anzahl
in dem Stapel ist die Letzte Antwort
//Für Gültigkeit, Wenn Sie mit der linken sind nur eine Zahl im Stack seine richtige Ausdruck
//Wenn Sie Links mit mehr als einer Nummer in der stack-und kein Betreiber dann seine falschen
//Wenn Sie eine oder keine Zahl im stack und Betreiber Links, dann seine falschen
Einen postfix-Ausdruck ist gültig, wenn und nur wenn:
1) Die ersten zwei Elemente sind die Operanden(Werte), und
2) Das Letzte element ist ein operator, und
3) Für jedes n die Werte n-1 operator(s), und
4) In einer Liste von n Elementen, beginnend mit index i = 0 für i < n-1 (die zweite letzten element), jede Gruppe von Elementen, bestehend aus k-Werten( k > 1 ) folgt (k-1) Betreiber. Wenn k = 1, die Anzahl der Operatoren, folgt = k = 1.
Zu prüfen, ob ein postfix-Ausdruck gültig ist oder nicht:(wenn Eingabe in char-array)
1.Anzahl der Operanden müssen gleich keine. der Operatoren + 1.
Um dies zu überprüfen, kontrollieren variable.
check=0. Erhöhen Sie diesen für jeden Operanden-und Dekrement-für jeden Betreiber.Wenn schließlich der Wert ist 1,dann-Ausdruck gültig ist.
2.Die ersten 2 Elemente des Arrays werden müssen Operanden.Kein postfix-Ausdruck operator als 1. oder 2. element.
Überprüfen Sie dies durch eine if-Anweisung.