主題: 中序轉後序
查看單個文章
舊 2011-07-24, 07:29 AM   #4 (permalink)
getter
管理員
 
getter 的頭像
榮譽勳章
UID - 6433
在線等級: 級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時級別:96 | 在線時長:9733小時 | 升級還需:64小時
註冊日期: 2002-12-08
住址: 天線星球
文章: 8157
精華: 0
現金: 19955 金幣
資產: 765391 金幣
預設

2.if(item=='(')breakㄤ;,item 沒有內容怎麼會等於'('?

並非是沒有內容 ...
而是程式在逐步取得字元符號比對的時候,當 item 變數器的內容是 ( 時,
就執行 break 中斷某個迴圈執行 ...

語法:
if (is_operand(token)) postfix[j++] = token;
   else if (token == '(') push(token);
   else if (token == ')') 
       while (S.top > -1) // if (item == '(') break; 是中斷這一個迴圈
           { 
             pop(&item);
             if (item == '(') break; 
             postfix[j++] = item;
           }

3.為什麼會push(token)?
應該說 push(token) 的使用時機為何? 將 ( 放到堆疊裡,或是某的運算符號
放到堆疊裡
語法:
if (is_operand(token)) postfix[j++] = token;
   else if (token == '(') push(token);
   else if (token == ')') 
       while (S.top > -1)
           { 
             pop(&item);
             if (item == '(') break;
             postfix[j++] = item;
           }
...
...
...
else if (is_operator(token)){
...
push(token);
}
再依適當的機會把堆疊裡的東西取出,就達到中置轉後置

建議編寫不管是哪一種程式的原始碼,可以稍稍排版整理一下,如上
這樣子可以增加程式的易讀性,而且哪幾行一組,哪幾行是相關的,
哪幾行是一個 Function。 也可以利用註解幫助說明或是排版。

此帖於 2011-07-24 11:21 AM 被 getter 編輯.
__________________
在「專業主討論區」中的問題解決後,要記得按一下 http://forum.slime.com.tw/images/stamps/is_solved.gif 按鈕喔,
這是一種禮貌動作。

一樣是在「專業主討論區」中發問,不管問題解決與否,都要回應別人的回答文喔。
不然搞 [斷頭文],只看不回應,下次被別人列入黑名單就不要怪人喔。

天線寶寶說再見啦~ ... 天線寶寶說再見啦~

迪西:「再見~ 再見~」

Otaku Culture Party 關心您 ...
getter 目前離線  
送花文章: 37855, 收花文章: 6441 篇, 收花: 26052 次
回覆時引用此帖
向 getter 送花的會員:
bobo0836 (2011-07-25)
感謝您發表一篇好文章