C++ 中的字尾表示式轉中綴表示式
在這個問題中,我們得到字尾表示式的形式,我們的任務是打印表達式的中綴形式。
中綴表示式是一種運算子位於運算元中間的表示式,例如 運算元 運算子 運算元。
字尾表示式是一種運算子位於運算元之後的表示式,例如 運算元 運算元 運算子。
字尾表示式易於系統計算,但不易於人類閱讀。因此需要進行這種轉換。通常,終端使用者進行閱讀和編輯使用中綴表示法,因為它們是用括號分隔的,因此易於人類理解。
讓我們舉個例子來理解這個問題
輸入 − xyz/*
輸出 − (x * (y/z))
為了解決這個問題,我們將使用堆疊資料結構。逐一遍歷字尾表示式,然後檢查以下情況:
情況 1 - 如果找到運算元,則將其壓入堆疊。
情況 2 - 如果找到運算子,則彈出兩個運算元,建立這三個運算元的中綴表示式,並將該表示式作為運算元壓入堆疊。
最後,當堆疊中只剩下一個元素並且遍歷完成後,彈出堆疊頂部,這就是中綴轉換的結果。
示例
程式演示了我們解決方案的實現。
#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}}}
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP