中字尾表示式的相互轉換和四則運算表示式求值

2021-08-06 01:16:36 字數 2241 閱讀 7754

這篇部落格講的超級好

//原理就是中綴表示式我們需要先轉字尾表示式, 然後就可以求了.

int

calculate

(string s)

-- i;

hou.

push_back

(to_string

(tmp));

}else

if(s[i]

=='('

) st.

push

(s[i]);

else

if(s[i]

==')'

) st.

pop();

}else

st.push

(s[i]);

}}}while

(!st.

empty()

) stack<

double

>

num;

// 下面是求值過程

for(

int i =

0; i < hou.

size()

;++ i)

else num.

push

(stod

(hou[i]))

;}return num.

top();

}double

cal(

double x,

double y, string op)

// 下面的稍顯複雜, 不過先留著mark

下面附上**實現:

###1:中綴表示式轉字尾表示式code

const

int maxn =

1e3+5;

char zhong[maxn]

;char hou[maxn]

;stack<

char

>

s;void

solve()

}else

if(zhong[i]

=='*'

|| zhong[i]

=='/'

) s.

push

(zhong[i]);

}else

if(zhong[i]

=='+'

|| zhong[i]

=='-'

) s.

push

(zhong[i]);

}}}while

(!s.

empty()

) hou[cnt]=0

;printf

("%s\n"

,hou)

;}

模板題

###2 : 四則運算表示式求值(有了以上的基礎,這個就比較簡單)

code

const

int maxn =

1e3+5;

char zhong[maxn]

;char hou[maxn]

;char num[maxn]

;db res[maxn]

;stack<

char

>

s;stack

cal;

void

solve()

i--; res[cnt++]=

atof

(num);}

else

}else

if(zhong[i]

=='*'

|| zhong[i]

=='/'

) s.

push

(zhong[i]);

}else

if(zhong[i]

=='+'

|| zhong[i]

=='-'

) s.

push

(zhong[i]);

}}}while

(!s.

empty()

)for

(int i=

0;iprintf

("%.2f\n"

,cal.

top())

; cal.

pop();

}}

中綴 字首 字尾表示式 相互轉換

1.中綴表示式 便於人看 2.字首表示式 波蘭式 運算子在前面,運算數在後面 3.字尾表示式 逆波蘭式 運算數在前面,運算子在後面 中綴 字首 優先順序先乘除再加減,入棧方向從右往左,棧外的符號想進棧,棧內的符號想出棧。棧外左括號不能進棧,棧外右括號優先順序最高。棧內右括號優先順序最低。中綴 字尾 ...

四則運算的中綴表示式和字尾表示式

中綴表示式 就是運算符號在數字中間的表達方式。字尾表示式 運算符號在數字的後面出現。1 中綴表示式向字尾表示式的轉換方法 規則 從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即成為字尾表示式的一部分 若是符號,就判斷當前符號與棧頂符號的優先順序,如果是右括號或者是優先順序低於棧頂符號 乘除...

中綴 字尾表示式 四則運算

中綴表示式轉化為字尾表示式,並通過字尾表示式計算值 轉化規則 出棧 出棧後元素新增到字尾表示式的末尾 中綴表示式掃瞄完畢後,若棧內元素不為空,依次出棧直到棧為空,出棧元素新增到字尾表示式後 舉例 3 2 5 4 2 過程如下 建立操作符棧,以及儲存字尾表示式的佇列 從頭到尾掃瞄中綴表示式,首先掃瞄到...