C ++中的后缀转换前缀

在这个问题上,我们给了一个前缀表达式。我们的任务是打印给定表达式的后缀转换。

前缀表达式是在操作数之前具有运算符的表达式。

例如:+ AB。

后缀 表达式是在表达式中的操作数之后带有运算符的表达式。

示例:AB /

前缀到后缀的转换不应涉及到后缀的转换。

让我们举个例子来了解这个问题,

Input: /+XY+NM

Output: XY+NM+/

Explanation: infix -> (X+Y)/(N+M)

为了解决这个问题,我们将首先以相反的顺序遍历整个后缀表达式。我们将使用堆栈数据结构进行处理。并针对发现遍历的元素的情况执行以下操作

案例:如果符号是操作数->堆栈中的push(element)。

案例:如果符号是运算符-> 2 * pop(element)from stack。然后推送操作数的序列-操作数-运算符。

程序展示了我们算法的实现

示例

#include <iostream>

#include <stack>

using namespace std;

bool isOperator(char x) {

   switch (x) {

      case '+':

      case '-':

      case '/':

      case '*':

      return true;

   }

   return false;

}

string convertToPostfix(string prefix) {

   stack<string> expression;

   int length = prefix.size();

   for (int i = length - 1; i >= 0; i--) {

      if (isOperator(prefix[i])) {

         string op1 = expression.top();

         expression.pop();

         string op2 = expression.top();

         expression.pop();

         string temp = op1 + op2 + prefix[i];

         expression.push(temp);

      }

      else

         expression.push(string(1, prefix[i]));

   }

   return expression.top();

}

int main() {

   string prefix = "*-AB/+CD*XY";

   cout<<"Prefix expression : "<<prefix<<endl;

   cout<<"Postfix expression : "<<convertToPostfix(prefix);

   return 0;

}

输出结果

Prefix expression : *-AB/+CD*XY

Postfix expression : AB-CD+XY*/*

以上是 C ++中的后缀转换前缀 的全部内容, 来源链接: utcz.com/z/360942.html

回到顶部