![]() |
如何把這一個程式改成 中序變前序
//如何把這一個程式改成 中序變前序??要改哪一些呢??
#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; } |
所有時間均為台北時間。現在的時間是 02:47 PM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *