C++ 中的前缀转后缀转换
在此问题中,给出了一个前缀表达式。我们的任务是打印该表达式的后缀转换。
前缀表达式是操作符位于操作数之前的表达式。
例如:+AB。
后缀表达式是操作符位于表达式中操作数之后的表达式。
例如:AB/
不要将前缀转换为后缀时涉及转换为中缀。
我们举一个例子来理解这个问题,
Input: /+XY+NM Output: XY+NM+/ Explanation: infix -> (X+Y)/(N+M)
为了解决此问题,我们首先以相反的顺序遍历整个后缀表达式。并且,我们将使用堆栈数据结构来进行我们的处理。对于遍历中找到的元素情况,执行以下操作
情况:如果符号是操作数 -> 将元素压入堆栈中。
情况:如果符号是操作符 -> 从堆栈中弹出 2*,然后将操作数 - 操作数 - 操作符序列压入。
显示我们算法实现的程序
示例
#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*/*
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP