中綴,字尾,字首表示式轉換和求值

2021-09-24 11:44:33 字數 2342 閱讀 3312

一般的表示式中常見的運算: +,−

,×,/

+,-,\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 保持在它們的相對位置。只有操作符改變位置。再看中綴表示式中的運算子。從左到右出現的第乙個運算子為 然而,在字尾表示式中,在結束位置,因為下乙個運算子 的優先順序高於加法。原始表示式中的運算子的順序在生成的字...