中缀转前缀表达式

/中缀转前缀:
进栈元素:) + * - /
进栈规则:
从后往前扫中缀表达式
若栈顶元素比目前元素的优先级大或者相等,出栈
若栈顶元素与当前元素优先级小,入栈;
若当前元素为’)‘入栈
若当前元素为’(’,出栈顶元素直到遇到’)‘位置,并且’('不表达
遇到操作数直接入栈
/

#include <stdio.h>
#include <math.h>
#include <stdlib.h> 
#define N 10
void fun(char A[])
{
	char stack[N];
	int stop=-1;
	
	char result[N];
	int rtop=-1;
	
	int i=0;
	while(A[i]!='\0')
	{
		i++;
	}
	i--; 
	while(i>=0)
	{
		if(A[i]=='*' || A[i]=='/')
		{
			if(stop==-1) 
			{
				stack[++stop]=A[i];
			}
			else
			{
			 	while(stack[stop]=='*' ||stack[stop]=='/')
				 {
					result[++rtop]=stack[stop--];
				 }
				 stack[++stop]=A[i]; 
			}
		}
		else if(A[i]=='+' || A[i]=='-')
		{
			if(stop==-1) 
			{
				stack[++stop]=A[i];
			}
			else
			{
			 	while(stack[stop]=='*' ||stack[stop]=='/' ||stack[stop]=='+' ||stack[stop]=='-')
				 {
				 	result[++rtop]=stack[stop--];
				 }
				 stack[++stop]=A[i]; 
			}
		}
		else if(A[i]=='(')
		{
			while(stack[stop]!=')')
			{
				result[++rtop]=stack[stop--];
			}
			--stop; 
		}
		else if(A[i]==')')
		{
			stack[++stop]=A[i];
		} 
		else
		{
			result[++rtop]=A[i];
		}
		i--;
	}
	while(stop!=-1)
	{
		result[++rtop]=stack[stop--];
	}	
	while(rtop!=-1)		
	    printf("%c",result[rtop--]);
} 

int main()
{
	char A[]="(a+b*e)*(c/d)";
	fun(A);
	
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值