2015年05月13日 21:26:20
这几天看数据结构一直都说一个中缀转后缀的问题!今天我就来实现一下!这个只是当作交流与启蒙。但是也算是心血,有不足的地方欢迎指出!谢谢大家!
要实现这个程序其实只要抓住两点:1、遇到操作数立即输出!
2、遇到操作符立即压栈一直当遇到优先级比自己低或者同级的!(括号需特别处理!);
废话不说,上源码!
#include <stdio.h>
/*
** 2015/5/10
** 中缀转后缀:1、遇到操作数立即输出
** 2、遇到操作符立即压栈一直当遇到优先级比自己低或者同级的!
** the inffux -> the suffix
*/
char inffux[256],suffix[256],buff[256];
int count = 0;
int count_of_buff = 0;
//处理加法
void
deal_add()
{
if( buff[count_of_buff-1] == '+' || buff[count_of_buff-1] == '*' )
{
suffix[count++] = buff[--count_of_buff];
buff[count_of_buff++] = '+';
}
else
buff[count_of_buff++] = '+';
return ;
}
void
deal_multi()
{
if( buff[count_of_buff-1] == '*' )
{
suffix[count++] = buff[--count_of_buff];
buff[count_of_buff++] = '*';
}
else
buff[count_of_buff++] = '*';
return ;
}
void
deal_parnt(int state)
{
if(state == 1)
buff[ count_of_buff++ ] = '(';
else if(state == 0)
{
while( buff[ --count_of_buff ] != '(')
{
suffix[count++] = buff[count_of_buff];
buff[count_of_buff] = 0;
}
buff[count_of_buff] = 0;
}
return ;
}
int
main(void)
{
//我想做一个用一个分流器来做!
scanf("%s",inffux);
int i = 0;
char *ptr;
ptr = inffux;
while( *ptr != '\0')
{
switch( *ptr )
{
case '+':
deal_add();
break;
case '*':
deal_multi();
break;
case '(':
deal_parnt(1);
break;
case ')':
deal_parnt(0);
break;
default:
suffix[count++] = *ptr;
break;
}
ptr++;
}
while(count_of_buff >= 0)
suffix[count++] = buff[--count_of_buff];
suffix[count] = '\0';
puts(suffix);
return 0;
}