中綴轉字尾和字首
中綴轉字尾
#include<bits/stdc++.h>
using namespace std;
bool isOperator(char ch) {
if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')' || ch == '^')
return true;
return false; // 否則返回false
}
int getPriority(char ch) {
int level = 0; // 優先順序
switch(ch) {
case '+':
case '-':
level = 2;
break;
case '*':
case '/':
level = 3;
break;
case '^':
level = 4;
break;
default:
break;
}
return level;
}
string Postorder;
void Trans(string Inorder){//中轉後
stack<char> s;
int len = Inorder.size();
for(int i = 0; i < len; i++){
char now = Inorder[i];
if(isOperator(now)){//是運算子
if(now == '(') s.push(now);
else if(now == ')'){
while(s.top() != '(') {
char top = s.top();
Postorder.push_back(top);
s.pop();
}
s.pop();
}
else{
int prior = getPriority(now);//得到優先順序
while(!s.empty()){
char top = s.top();
if(prior <= getPriority(top)){//優先順序小於棧頂元素
Postorder.push_back(top);//加入字尾表示式並且出棧
s.pop();
}else break;
}
s.push(now);
}
}
else Postorder.push_back(now); //數字直接加入字尾表示式
}
while(!s.empty()){
char top = s.top(); s.pop();
Postorder.push_back(top);
}
}
int main(){
string s;
cin >> s;
Trans(s);
for(int i = 0; i < Postorder.length(); i++) cout << Postorder[i] ;
return 0;
}
中綴轉字首
思路:從右往左掃描求字尾再將得到的字尾表示式逆序輸出就是字首表示式
#include<bits/stdc++.h>
using namespace std;
bool isOperator(char ch) {
if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')' || ch == '^')
return true;
return false; // 否則返回false
}
int getPriority(char ch) {
int level = 0; // 優先順序
switch(ch) {
case '+':
case '-':
level = 2;
break;
case '*':
case '/':
level = 3;
break;
case '^':
level = 4;
break;
default:
break;
}
return level;
}
string Postorder;
void Trans(string Inorder){//中轉前
stack<char> s;
int len = Inorder.size();
for(int i = len - 1; i >= 0; i--){//反過來遍歷
char now = Inorder[i];
if(isOperator(now)){//是運算子
if(now == ')') s.push(now);//'('改為')'
else if(now == '('){//')'改為'('
while(s.top() != '(') {
char top = s.top();
Postorder.push_back(top);
s.pop();
}
s.pop();
}
else{
int prior = getPriority(now);//得到優先順序
while(!s.empty()){
char top = s.top();
if(prior <= getPriority(top)){//優先順序小於棧頂元素
Postorder.push_back(top);//加入字尾表示式並且出棧
s.pop();
}else break;
}
s.push(now);
}
}
else Postorder.push_back(now); //數字直接加入字尾表示式
}
while(!s.empty()){
char top = s.top(); s.pop();
Postorder.push_back(top);
}
}
int main(){
string s;
cin >> s;
Trans(s);
// reverse(Postorder.begin(),Postorder.end());
// for(int i = 0; i < Postorder.length(); i++) cout << Postorder[i] ;
for(int i = Postorder.length() - 1; i >= 0; i--) cout << Postorder[i];//逆序輸出
return 0;
}
相關文章
- 字首中綴字尾表示式規則
- 中綴表示式轉字尾表示式
- 中綴轉字尾表示式思路分析和程式碼實現
- 中綴表示式轉化為字尾表示式並求值
- 逆波蘭演算法、中綴表示式轉字尾表示式演算法
- 教你如何在C++中實現中綴表示式轉字尾表示式C++
- 【資料結構與演算法】中綴表示式轉字尾表示式以及字尾表示式的計算資料結構演算法
- js實現四則計算(中綴,字尾表示式)JS
- 資料結構與演算法——棧(五)中綴表示式轉字尾表示式資料結構演算法
- 從Bash中的字串中刪除固定的字首/字尾字串
- abc284F 字首+逆序+字尾
- Java按位或合併ipv6字首和字尾Java
- C語言- 基礎資料結構和演算法 - 09 棧的應用_中綴表示式轉字尾表示式20220611C語言資料結構演算法
- 資料結構基礎--字首樹&&字尾樹資料結構
- 【新特性速遞】數字輸入框的字首和字尾(位於輸入框內部)
- POJ 2752+KMP+利用next陣列性質求出所有相同的字首和字尾KMP陣列
- [開發教程]第16講:Bootstrap文字框的字首與字尾boot
- 1048 數字加密(字首和思想)加密
- 資料結構 中綴表示式轉化資料結構
- 前中字尾表示式
- milvus 中的 coord 字尾和 node 字尾有什麼區別? 相關文件說明在哪裡?
- 中綴表示式轉為逆波蘭表示式
- 中綴表示式
- 字首和與二維字首和
- 關於利用STL棧求解四則中綴表示式以及中綴表示式轉逆波蘭表示式和逆波蘭表示式的求解
- 字首和
- (Day4)字首和&二維字首和
- Task A1 中綴表示式轉換為逆波蘭式
- 何謂中綴表示式
- 計算中綴表示式
- 尾呼叫和尾遞迴遞迴
- 字串字尾相關字串
- 字尾陣列,SA陣列
- 歌曲字尾解釋
- 字尾陣列 SA陣列
- 字尾陣列模板陣列
- c++中數字和字串的轉換C++字串
- 高維字首和