中缀表达式转成后缀表达式 C实现

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值