如何把這一個程式改成 中序變前序
//如何把這一個程式改成 中序變前序??要改哪一些呢??
#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;
}
|