電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
C中序轉後序(infix to posfix)

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
neilshih
Neilshih專區 板主


註冊時間: 2007-06-03
文章: 33
來自: 地球
20.01 果凍幣

發表發表於: 2007-6-6, PM 10:05 星期三    文章主題: C中序轉後序(infix to posfix) 引言回覆

代碼:
#include <stdio.h>
#include <stdlib.h>
int postfix(char*);
int priority(char);
void push(char c);
void pop(void);
char stack[80] = {'\0'}; 
char output[80] = {'\0'};
int top = 0;
int x = 0;
main(){
    char input[80];     
    printf("Please enter infix sentence:");     
    scanf("%s", input);     
    postfix(input);   
    puts(output);
    system("PAUSE");
    return 0;
}

int postfix(char* infix){     
    int i = 0;     
    char op; 
    while(1){
        op = infix[i];         
        switch(op){
            case '\0':                 
                while(top > 0){
                    output[x++] = stack[top];                     
                    pop();
                }               
                printf("\n");   
                return 0;
            case '(':         
                    push(op);           
                break;
            case '+': case '-': case '*': case '/':                 
                while(priority(stack[top]) >= priority(op)){                     
                    output[x++] = stack[top];                   
                    pop();                 
                }                 
                push(op);                       
                break;               
            case ')':                 
                while(stack[top] != '('){                     
                    output[x++] = stack[top];                     
                    pop();                 
                }                 
                pop();             
                break;         
             default:                 
                output[x++] = op;                 
                break;         
        }         
        i++;
    }
}

int priority(char op){     
    int p;     
    switch(op){       
        case '+': case '-':
            p = 1;             
            break;         
        case '*': case '/':             
            p = 2;             
            break;         
        default:             
            p = 0;             
            break;     
    }     
    return p;
}
 
void push(char c){
    if(top < 80)
        stack[++top] = c;
    else
        printf("error,stack full");
}

void pop(void){
    if(top > 0)
        top--;
    else
        printf("error, cant pop");
}
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
話術師
對這略感興趣的新人


註冊時間: 2007-06-02
文章: 17
來自: 耗電量很高的地方
0.00 果凍幣

發表發表於: 2007-6-6, PM 11:25 星期三    文章主題: 引言回覆

程式碼加上註解吧
這樣比較容易他人觀看 Surprised

_________________
人生真累呀
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
chumi
稍嫌羞澀的路人


註冊時間: 2008-04-19
文章: 1

0.00 果凍幣

發表發表於: 2008-4-19, PM 8:51 星期六    文章主題: 引言回覆

while(1)這邊我看不太懂,可否解釋一下呢
回頂端
檢視會員個人資料 發送私人訊息
yag
Site Admin


註冊時間: 2007-05-02
文章: 689

2704.11 果凍幣

發表發表於: 2008-4-19, PM 11:49 星期六    文章主題: 引言回覆

chumi 寫到:
while(1)這邊我看不太懂,可否解釋一下呢

while(1)就是無限迴圈
直到return 0;時才會跳出
在c++中,布林代數可用數字代替
0代表false,非0代表true
一般來說,會用1來代表true
但如果你喜歡,要用2、3、4、5、6…都行
所以while(1)就是while(true)
而while迴圈的條件式必須為false時才會中止
true永遠不為false
因此while會永遠重複執行
這就叫做無限迴圈
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
babu61509
散播福音的祭司


註冊時間: 2007-08-26
文章: 142

681.01 果凍幣

發表發表於: 2008-4-20, PM 5:49 星期日    文章主題: 引言回覆

這個應該是PO 到 資料結構 討論區吧0 .0?

---------------------------------------------
我在想...會不會有人不知道中序和後序是瞎咪吧XD?

剛好最近老師在教這個...不然我也不知道這是瞎咪- .-

_________________
已經畢業了!!
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作