一般的表示式中常見的運算: +,−
,×,/
+,-,\times,/
+,−,×,
/ 特殊的符號: (,)
( \ ,\quad )
(,)
特殊運算子: ∧
\wedge
∧ 冪指數運算
以字串 a×b
+c−d
/(e∧
f∧g×
h)
a \times b + c - d / (e^ f^ g \times h)
a×b+c−
d/(e
∧f∧g
×h) 為例。
過程:讀入數字,直接輸出
讀入 +,−
,×,/
+,-,\times,/
+,−,×,
/ 之前 , 輸出前面優先順序大於等於該運算子的運算子,然後將該字元存入字元棧;最後輸出全部剩餘字元
左右括號:左括號,直接讀入字元棧;讀入右括號,輸出字元棧中的字元,一直到左括號為止。
讀入 ∧
\wedge
∧, 要輸出前面優先順序大於該運算子的運算子(實際上並沒有)。
結果:a,b
,×,c
,+,d
,e,f
,g,∧
,∧,h
,×,/
,−
a,b,\times,c,+,d,e,f,g,\wedge,\wedge,h,\times,/,-
a,b,×,
c,+,
d,e,
f,g,
∧,∧,
h,×,
/,−和字尾很相似,但是字首都是倒過來的:倒著讀入中綴表示式
讀入數字,直接存入輸出列
讀入 +,−
,×,/
+,-,\times,/
+,−,×,
/ 之前 , 彈出前面優先順序大於該運算子的運算子,然後將該字元存入字元棧;最後彈出全部剩餘字元
左右括號:右括號,直接讀入字元棧;讀入左括號,輸彈出字元棧中的字元,一直到右括號為止。
讀入 ∧
\wedge
∧, 要彈出前面優先順序大於等於該運算子的運算子(實際上只有自己)。
最後倒著輸出!!!
結果: −,+
,×,a
,b,c
,/,d
,×,∧
,e,∧
,f,g
,h
-,+,\times,a,b,c,/,d,\times,\wedge,e,\wedge,f,g,h
−,+,×,
a,b,
c,/,
d,×,
∧,e,
∧,f,
g,h其實更加簡單。
為了方便起見,我們預設初始的單個變數左右都帶有括號。左右是括號的稱為表示式。
按照字尾表示式的運算順序,在碰到運算操作的時候,將運算子插入到前面兩個表示式中間,然後再兩個表示式兩端加上括號,構成乙個新的表示式加入到棧中。
最後棧中只剩下乙個中綴表示式,就是最終的結果。
和字尾轉中綴原理是一樣的,注意順序即可。
正常讀入。數字存入數字棧;讀入運算子,立即對棧頂兩個數進行運算,然後合併成乙個數。
s ta
ck[t
op−1
]=st
ack[
top−
1]op
erat
orst
ack[
top]
top−
−stack[top-1] = stack[top-1]\ \ operator \ stack[top]\\ top--
stack[
top−
1]=s
tack
[top
−1]o
pera
tors
tack
[top
]top
−−倒著讀入。也是讀入運算子立即運算,順序不同。
s ta
ck[t
op−1
]=st
ack[
top]
oper
ator
stac
k[to
p−1]
top−
−stack[top-1] = stack[top]\ \ operator \ stack[top-1]\\ top--
stack[
top−
1]=s
tack
[top
]ope
rato
rsta
ck[t
op−1
]top
−−
字首 中綴 字尾表示式及其求值
它們都是對表示式的記法,因此也被稱為字首記法 中綴記法和字尾記法。它們之間的區別在於運算子相對與運算元的位置不同 字首表示式的運算子位於與其相關的運算元之前 中綴和字尾同理。比如 4 5 6 7 就是中綴表示式 4567 字首表示式 45 6 7 字尾表示式 中綴表示式 中綴記法 中綴表示式是一種通...
字首,中綴,字尾表示式轉換
title 字首,中綴,字尾表示式轉換 date 2017 09 10 19 45 09 categories technology tags 在計算機中表示式有三種,字首表示式 波蘭式 中綴表示式,字尾表示式 逆波蘭式 如表示式 a b c d e f 字首表示式 a b cd ef 中綴表示式 ...
中綴表示式 轉換為 字首 字尾表示式
考慮表示式a b c。a b c 是等價的字尾表示式。我們已經注意到,運算元 a,b 和 c 保持在它們的相對位置。只有操作符改變位置。再看中綴表示式中的運算子。從左到右出現的第乙個運算子為 然而,在字尾表示式中,在結束位置,因為下乙個運算子 的優先順序高於加法。原始表示式中的運算子的順序在生成的字...