中綴變字尾主要的思想就是將需要的運算子先做乙個對映
對於任意表示式,式中從頭開始掃,遇到非運算子,即任意數字或字母直接輸出
遇到運算子考慮放入棧中
若棧空則放入
若棧不為空,判斷棧頂的優先順序是否 < 待放入的運算子,若 小於則將其壓入棧中;
若不小於,則將棧一直 pop,知道運算子可以放入棧中
當然還有特殊的元素符, '(' ')' 這兩個元素比較特殊,『(』 元素符優先順序最大,自然放入棧中,但是要注意,只有遇到 ')' 時,『(』
才會彈出,所以在棧中有 '(' 時,需要特判,當然 '(' ')' 這兩個運算子是不需要輸出的
下面給出應用 stl 中的程式和自己寫的棧鏈的程式,主函式是相似的,只是在不重要的地方改了一下
#include #include #include using namespace std;
int n,m,t;
int i,j,k;
//int a[n];
mapmp;
int main()
if(s.empty() || mp[str[i]]>mp[s.top()])
else cout<#include #define null null
using namespace std;
int n,m,t;
int i,j,k;
//int a[n];
mapmp;
struct node
;class stack
void push(char x)
void pop()
char top()
bool empty()
int size()
};int main()
if(s.empty() || mp[str[i]]>mp[s.top()])
else cout<}}}
}}
while(s.size()) cout
return 0;
}
將中綴表示式轉化成字尾表示式(逆波蘭式)
直接上 中綴表示式 轉換成 字尾表示式 逆波蘭式 include include struct stack int get priority char c int isempty struct stack s struct stack createstack unsigned int len voi...
將中綴表示式轉化成字尾表示式來計算值
題目很簡單,就是給出乙個表示式 例如2 3 5 6 然後我們得出他的值。未接觸這個方法前,我是用了一種很複雜的方法 爆肝警告 將中綴表示式 就是我們要求的表示式 轉化成字尾表示式來解決就會比較簡單。對於中綴表示式和字尾表示式的概念這裡就不說了,只將方法呈現出來。例如乙個中綴表示式 a b c d e...
一文看懂中綴表示式轉化成字尾表示式
通過堆疊的學習,我們已經知道想要將中綴表示式轉化成字尾表示式,有以下幾步操作 1.對於運算數 直接輸出 2.對於左括號 直接壓入棧中 3.對於右括號 將棧頂的運算子彈出並輸出,若棧頂元素不是左括號,繼續彈出,直到遇到左括號 出棧,但是不輸出 4.對於運算子 若優先順序大於棧頂運算子時,則把他壓棧 若...