C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのInfixへのPostfix


この問題では、式が接尾辞形式で与えられ、式の接尾辞形式を印刷することがタスクです。

中置式 オペランド演算子オペランドのように、演算子がオペランドの真ん中にある式です。

接尾辞式 オペランド演算子のように、演算子がオペランドの後にある式です。

接尾辞の式はシステムによって簡単に計算されますが、人間が読める形式ではありません。したがって、この変換が必要です。一般に、エンドユーザーによる読み取りと編集は、括弧で区切られているため、人間が簡単に理解できる中置記法で行われます。

問題を理解するために例を見てみましょう

入力 − xyz / *

出力 −(x *(y / z))

この問題を解決するために、スタックデータ構造を使用します。そして、接尾辞の式を1つずつトラバースしてから、次の場合を確認します-

ケース1 −オペランドが見つかった場合は、スタックにプッシュします。

ケース2 −演算子が見つかった場合は、オペランドにポップし、3つの中置式を作成して、式をオペランドとしてプッシュします。

最後に、スタックに残っている要素が1つだけでトラバースが完了したら、スタックの一番上をポップします。これが中置変換です。

ソリューションの実装を示すプログラム。

#include <bits/stdc++.h>
using namespace std;
bool isOperand(char x) {
   return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z');
}
string infixConversion(string postfix) {
   stack<string> infix;
   for (int i=0; postfix[i]!='\0'; i++) {
      if (isOperand(postfix[i])) {
         string op(1, postfix[i]);
         infix.push(op);
      } else {
         string op1 = infix.top();
         infix.pop();
         string op2 = infix.top();
         infix.pop();
         infix.push("{"+op2+postfix[i]+op1 +"}");
      }
   }
   return infix.top();
}
int main() {
   string postfix = "xyae+/%";
   cout<<"The infix conversion of the postfix expression '"<<postfix<<"' is : ";
   cout<<infixConversion(postfix);
   return 0;
}

出力

The infix conversion of the postfix expression 'xyae+/%' is : {x%{y/{a+e}}}

  1. C++での例を含む式ツリー

    式ツリーは、ツリーの各ノードが演算子またはオペランドで構成される特殊なタイプの二分木です。 リーフノード ツリーのオペランドを表します 。 非リーフノード ツリーの演算子を表します 。 例: 簡単に解決できる中置式を取得するには、順序トラバーサルを使用してツリーをトラバースする必要があります。

  2. C++での式ツリーの評価

    この問題では、+、-、/、*などの二項演算で構成される式ツリーが与えられます。式ツリーの評価を行ってから、結果を返す必要があります。 表現ツリー は特殊なタイプの二分木であり、各ノードは次のように分散される演算子またはオペランドで構成されます- ツリーのリーフノードは、操作が実行される値です。 非リーフノードは二項演算子で構成されます 実行する操作を示します。 問題を理解するために例を見てみましょう 入力: 出力: 1 説明: 式ツリーのデコード Exp =((5 + 9)/(2 * 7)) =(14/14) = 1 ソリューションアプローチ