查看單個文章
舊 2011-10-23, 07:45 PM   #1
sdds4747
註冊會員
榮譽勳章

勳章總數0
UID - 348987
在線等級: 級別:0 | 在線時長:1小時 | 升級還需:4小時
註冊日期: 2011-10-02
文章: 2
精華: 0
現金: 2 金幣
資產: 2 金幣
預設 如何把這一個程式改成 中序變前序

//如何把這一個程式改成 中序變前序??要改哪一些呢??


#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;
}
sdds4747 目前離線  
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖