作者LPH66 (Turbo C++ vs DJG++)
看板Visual_Basic
標題Re: 字串轉數值
時間Wed May 14 11:28:56 2003
※ 引述《Dumkas (逃逸的影像)》之銘言:
: ※ 引述《Ihope (我期待..)》之銘言:
: : 請問一下什麼是「前序」、「後序」???
: 雖然我不會
: 不過我記得是演算法的一種
: 好像跟堆疊有關
: 可以去programming板問~
一般的運算式分三種
中序式 我們平常在用的式子 ex:a*b
前序式 將運算子(+,-,*,/)放在運算元前面 ex:*ab
後序式 將運算子放在運算元後面 ex:ab*
由於中序式有()的出現
以電腦處現較不方便
而前序式及後序式均無() 因為出現的順序決定了運算的順序
所以可以堆疊處理
而後序式在做計算時只需一個堆疊 前序式需兩個
故許多人常轉換成後序式運算
至於怎麼轉 看以下範例
(程式的跑法就請各位自行查書 因為太長了我不PO了)
[中序式轉前序式]
設中序式為 a*(b+c)/d-e
(紙筆算法) 標出順序 ((a*(b+c))/d)-e
移運算子 -(/(*a(+bc))d)e
去括號 -/*a+bcde
[中序式轉後序式]
同樣以上例說明
(紙筆算法) 標出順序 ((a*(b+c))/d)-e
移運算子 ((a(bc+)*)d/)e-
去括號 abc+*d/e-
[後序式運算]
讀入一字元 若為運算元則堆入堆疊
若為運算子則取出兩個運算元運算後堆回堆疊
設後序式為 635+*4/7- 也就是中序式的6*(3+5)/4-7
讀入 堆疊
6 運算元 堆入
(6)
3 運算元 堆入
(6)(3)
5 運算元 堆入
(6)(3)(5)
+ 運算子 運算
(6) 讀出3&5
作+得8
堆回
(6)(8)
* 運算子 運算
(空) 讀出6&8
作*得48
堆入
(48)
4 運算元 堆入
(48)(4)
/ 運算子 運算
(空) 讀出48&4
作/得12
堆回
(12)
7 運算元 堆入
(12)(7)
- 運算子 運算
(空) 讀出12&7
作-得5
堆回
(5)
最後堆疊裡剩下的那一個數就是答案 此例中就是5
可以檢查一下:6*(3+5)/4-7=6*8/4-7=48/4-7=12-7=5
--
呼~~~終於打完了~~~
--
≡ File Edit Search Run Compile Debug Project Options Window Help
╔[0] ══════════════ LPH66.CPP ═══════════════╗
║#include <PTT.h> ║
║#include <BBS.h> ║
C:\DJGPP>gpp LPH66.cpp -o LPH66.exe
--
※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw)
◆ From: 163.15.56.3
→ Ihope:實在是太感謝這位前輩了.... 推 218.166.73.125 05/14
→ fivedollars:隨便一本資料結構的書都有吧... 推 61.216.126.107 05/14
→ LPH66:我才高一..... 推 163.15.56.3 05/20