[爆卦]prefix程式是什麼?優點缺點精華區懶人包

為什麼這篇prefix程式鄉民發文收入到精華區:因為在prefix程式這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者CharlieL (少說多做)看板C_and_CPP標題Re: 有關infix˙postfix˙...


※ 引述《title (MARIA ALWAYS)》之銘言:
: 我有一個問題˙˙
: 例如有一段 infix
: a+b*c/d+e 的式子
: 寫一程式把它變成 prefix
: ++/a*bcde
: 稍微指點就行了˙˙不勝感激

可以試著用如下的定義來 parse 一個式子

Expression := Expression '+' Term
or Expression '-' Term
or Term

Term := Term '*' Num
or Term '/' Num
or Num

Num := Variable
or '(' Expression ')'

這樣的定義(主要基於運算子的結合性與優先序)

可以用在一般的四則運算,幫助你把式子切開來

例如 Expression(a+b*c/d+e)
= Expression(a+b*c/d) '+' Term(e)
= Expression(a) '+' Term(b*c/d) '+' Num(e)
= Term(a) '+' Term(b*c) '/' Num(d) '+' Num(e)

...

把式子切開來以後

就可以用它來 construct 一個 Binary Tree

這個 Binary Tree 的 Leaf Node 是 Variable, 其他 Node 是 Operator

Infix, Prefix, Postfix 其實就是這個 Tree 的 Traversal 順序而已 :)

因為是「稍加指點」,所以就不給程式碼嘍 :)

--
也許人在愛人或被愛的過程中,
內心都藏著一份先天或後天所造成的偏執吧!
才會引發出那麼多不可解釋的愛的問題......

光禹.為真愛承諾

--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: t197-58.dialup.

> -------------------------------------------------------------------------- <

作者: CharlieL (少說多做) 看板: C_and_CPP
標題: Re: 有關infix˙postfix˙prefix變換
時間: Sun Mar 21 17:50:39 1999

※ 引述《hotball (哲哲魚)》之銘言:
: ※ 引述《title (MARIA ALWAYS)》之銘言:
: : 哇˙˙˙頗具啟發性耶˙˙
: : 軒田學長可以再多說一點嗎
: : 謝謝˙˙
: If all operators in your experssion are binary operators (i.e. takes two
: operands) then a simple stack implementation will do the job.
: The algorithm can be found in most textbooks about algorithm or data
: structure.

Ya, 學長的意思是醬子的

例如說我們在看這個式子

3+5*6-7/8^9*4

我們可以用醬的方法來作(用兩個 Stack)

Operator Stack
Operand Stack

然後呢?其實蠻簡單的,就是把這句話的 Operator/Operand 取出來

Push 進去 Stack 就可以了

例如說,上面的式子,經過五次 push 後,會變成

-7/8^9*4

Operator: + *
Operand: 3 5 6

這時候進來了一個 '-' 號,注意 '-' 的 Priority 比 '*' 要低

這意謂著什麼呢?就是 '*' 要先算,所以 instead of 直接把 '-' 號推進去

我們先處理 5*6 (如果是計算式子的值,就是把 5,6,* 拿出來,把 30 推進去)

於是 Stack 變成

Operator: +
Operand: 3 30

注意這時 '-' 號仍然意味著 '+' 號可以先算了

所以 Stack 變成

Operator:
Operand: 33

然後,再把 -7/8^9*4 繼續推入,得到

*4

Operator: - / ^
Operand: 33 7 8 9

* 的推入,會先導致 ^ 和 / 的被運算

如此繼續

就可以得到結果了

--
也許人在愛人或被愛的過程中,
內心都藏著一份先天或後天所造成的偏執吧!
才會引發出那麼多不可解釋的愛的問題......

光禹.為真愛承諾

--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: t201-54.dialup.

你可能也想看看

搜尋相關網站