1

この式を後置から中置に解くことができません。詳しく分かりやすく教えてください

5 x y - / x y + 3 ^ 7 / +
4

3 に答える 3

2

これはコードではありませんが、接尾辞を infix: に展開する必要があります。

5 xy - / xy + 3 ^ 7 / +

5 (xy) / xy+ 3^ 7 / +

(5/(xy)) xy+ 3^ 7 / +

(5/(xy)) (x+y)3^ 7 / +

(5/(xy)) ((x+y)^3) 7 / +

(5/(xy)) (((x+y)^3) / 7) +

(5/(xy)) + (((x+y)^3) / 7)

于 2012-10-16T06:21:47.270 に答える
1

それはかなり簡単です:

  1. 引数を読み取り、それが値か変数かを判断します。そうであれば、引数をスタックにプッシュします。そうでない場合は、オペレーターです。
  2. 演算子がある場合は、ルートとしての演算子と、その子と同じ数のスタックの引数で構成されるツリーを作成します。ツリーをスタックにプッシュします。
  3. 中置記法を印刷したい場合は、スタックの一番上を順番にたどります (元の後置記法は、同じツリーの後置ウォークです)。

C++ でこれに対処するためにExpression、さまざまな種類のノード ( ValueVariable、およびBinaryOperation) を表す派生クラスを持つ基本クラス ( ) を作成し、std::stack<std::shared_ptr<Expression>>. これをコーディングすることは、主にタイピングの演習です。

于 2012-10-16T06:26:47.283 に答える
0

後置から中置:

5 x y - / x y + 3 ^ 7 / +

ステップ

5 xy - /
A) 5xy-/ = 5 (xy)/ = (5 / (xy))
xy +
B) xy + = (x + y)
(x+y) 3 ^
B.1) (x + y ) 3 ^ = ((x + y) ^ 3 )
さて、 (5 / (xy)) ((x + y) ^ 3 ) 7 / +
= (5 / (xy)) (((x + y) ^ 3 )/7 ) + = (5 / (xy)) + (((x + y) ^ 3 )/7 )

POSTFIX と PREFIX は括弧を使用しない式です。演算子の優先順位は、式に出現する順に決定されるため、式を評価するために次の操作を検索してFASTを実行する必要はありません。

INFIX 式では、演算子の優先順位は括弧で上書きされます。したがって、括弧は中置式にあります-実行する操作を検索する必要があります。たとえば、 A+B%D -したがってSLOWです。
これが、コンピューター サイエンスで変換が役立つ理由です。

于 2012-10-16T06:33:36.123 に答える