|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2011-10-23, 07:45 PM | #1 |
註冊會員
|
程式 - 如何把這一個程式改成 中序變前序
//如何把這一個程式改成 中序變前序??要改哪一些呢??
#include "stdafx.h" #include<stdio.h> #include<stdlib.h> #include<conio.h> #define MAX_STACK_SIZE 100 #define MAX_EXPR_SIZE 100 typedef enum { lparan, rparan, plus, minus, times, divide, mod, eos, operand, ERROR_KEY }precedence; static int isp[8]={0,19,12,12,13,13,13,0}; static int icp[8]={20,19,12,12,13,13,13,0}; precedence stack[MAX_STACK_SIZE]; char expr[MAX_EXPR_SIZE]; void postfix(void); precedence get_token(char*,int*); void print_token(precedence); void push(int*,precedence); precedence pop(int*); precedence stack_empty(void); int top=0,n=0; void push(int *top,precedence token) { if((*top)>=MAX_STACK_SIZE-1) { printf("The stack is full!!\n"); return; } else stack[++*top]=token; } precedence pop(int *top) { if(*top==-1) return stack_empty(); else return stack[(*top)--]; } precedence stack_empty() { precedence ch; ch=ERROR_KEY; return ch; } precedence get_token(char *symbol,int *n) { *symbol=expr[(*n)++]; switch(*symbol) { case'(': return lparan; case')': return rparan; case'+': return plus; case'-': return minus; case'/': return divide; case'*': return times; case'%': return mod; case'\0': return eos; default: return operand; } } void postfix() { char symbol; precedence token; stack[0]=eos; int n=0; int top=0; for(token=get_token(&symbol,&n); token != eos;token=get_token(&symbol,&n)) { if(token==operand) printf("%c",symbol); else if(token==rparan) { while(stack[top]!=lparan) print_token(pop(&top)); pop(&top); } else { while(isp[stack[top]]>=icp[token]) print_token(pop(&top)); push(&top,token); } } while((token=pop(&top))!=eos) print_token(token); printf("\n"); } void print_token(precedence token) { precedence symbol; symbol=token; switch(symbol) { case 0: printf("("); break; case 1: printf(")"); break; case 2: printf("+"); break; case 3: printf("-"); break; case 4: printf("*"); break; case 5: printf("/"); break; case 6: printf("%"); break; case 7: printf(""); break; default: break; } } int main(void) { do { printf("Please input a infix expression: \n"); printf("expression: "); gets(expr); postfix(); printf("\nPress any key to continue~~~\n\n"); getche(); }while(expr); system("pause"); return 0; } |
送花文章: 0,
|
|
|
相似的主題 | ||||
主題 | 主題作者 | 討論區 | 回覆 | 最後發表 |
疑問 - 如何用if else 或 switch 把三個面積合成一個程式 | 9319074 | 程式語言討論區 | 6 | 2009-11-20 01:55 AM |
如何把一個檔案用成像exe應用程式,不必解壓縮的,有那種軟體可抓嗎? | keikolcd | 一般電腦疑難討論區 | 4 | 2003-08-04 01:35 AM |
Ghost 這一個程式該如何使用 | 電腦狂 | 軟體應用問題討論區 | 2 | 2003-02-07 06:26 AM |