中置への変換プレフィックス

中置  :演算子は式のオペランドの間に表示された場合、式は中置の式と呼ばれています。単純にフォーム(オペランド1演算子オペランド2)の。
例:(A + B)*(CD)

接頭辞  :演算子はオペランドの前の式に表示されている場合式は接頭辞式と呼ばれています。単純にフォーム(オペレータのオペランド1とオペランド2)の。
例:* + AB-CD(インフィックス:(A + B)*(CD))

プレフィックス式を考えると、中置表現に変換します。

分析:

  • (右から左へ)逆の順序でプレフィックス式を読みます
  • シンボルは、オペランドの場合は、スタックにプッシュ
  • シンボルはオペレータがある場合には、スタックから2つのオペランドをポップ
  • 二つのオペランドと、それらの間の演算子を連結した文字列を作成します。
  • 文字列=(オペランド1 +演算子+オペランド2)
  • スタックに戻す結果の文字列をプッシュ
  • プレフィックス式の最後まで、上記の手順を繰り返します。
1  クラスソリューション{
 2      ブールisOperator(チャーX){
 3          スイッチ(X){
 4              ケース ' + ' 5              ケース ' - ' 6              場合 ' / ' 7              場合 ' * ' 8                  リターン 9              デフォルト10                  リターン はfalse ;
11          }
 12      }
 13  
14     ストリングpreToInfix(文字列pre_exp){
 15          スタック<ストリング>スタック= 新しいスタック<> ();
16          int型の長さ= pre_exp.length()。
17          のためには、int型 I =長さ- 1 ; I> = 0 ; i-- ){
 18              であれば(isOperator(pre_exp.charAt(I))){
 19                  列OP1 = stack.pop()。
20                  列OP2 = stack.pop()。
21  
22                  文字列TEMP = " " + OP1 + pre_exp.charAt(I)+ OP2 + "" ;
 23                  stack.push(TEMP);
 24              } {
 25                  stack.push(pre_exp.charAt(I)+ "" );
 26              }
 27          }
 28          リターンstack.peek();
 29      } 
 30 }

 

おすすめ

転載: www.cnblogs.com/beiyeqingteng/p/11318704.html