BJFU_数据结构习题_254中缀表达式转化为后缀表达式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43722827/article/details/102755529

254中缀表达式转化为后缀表达式

描述
输入一个中缀算术表达式,将其转换为后缀表达式。运算符包括+、-、*、/、(、)、=,参加运算的为小于10的自然数。(只考虑二元运算即可)
输入
多组数据,每组数据一行,对应一个算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。
输出
对于每组数据输出一行,为表达式的后缀式。
输入样例 1
9+(3-1)3+1/2=
1+2=
=

输出样例 1
931-3
+12/+
12+

#include<iostream>
using namespace std;
#define  MAX  100 
#define  OK	0
#define  ERROR -1
#define  OVERFLOW -2
typedef struct
{
	char *base;
	char *top;
	int stacksize;
}SqStack;
int InitStack(SqStack &S)
{
	S.base=new char[MAX];
	if(!S.base) return OVERFLOW;
	S.top=S.base;
	S.stacksize=MAX;
	return OK;
}
int Push(SqStack &S, char e)  
{
	if(S.top-S.base==S.stacksize)
		return ERROR;
	*S.top=e;
	S.top++;
	return OK;
}
int Pop(SqStack &S)  
{
	if(S.top==S.base)
	return	ERROR;
	S.top--;
	return OK;
}
char Top(SqStack S)  
{
	if(S.top==S.base)
		return ERROR;
  	return *(S.top-1);
}
char Precede(char a,char b)
{
	if((a=='('&&b==')')||(a=='='&&b=='='))
		return '=';
	else if(a=='='||a=='('||b=='('||((a=='+'||a=='-')&&(b=='*'||b=='/')))
		return '<';
	else
		return '>';
} 
int main()
{
	char s[100];
	while(cin>>s&&s[0]!='=')
	{
		SqStack op;
		InitStack(op);
		Push(op,'=');
		for(int i=0;s[i]!='\0';i++)
		{
			if(s[i]>='0' && s[i]<='9')
				cout<<s[i];
			else
			{
				while(1)
				{
					if(Precede(Top(op),s[i])=='<')
					{
						Push(op,s[i]);
						break;
					}
					else if(Precede(Top(op),s[i])=='>')
					{
						char oper;
						oper=Top(op);
						Pop(op);
						cout<<oper;
					}
					else
					{
						Pop(op);
						break;
					}
				}
			}
		}
		cout<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43722827/article/details/102755529