您的位置:首页 > 理论基础 > 数据结构算法

数据结构实验之栈二:一般算术表达式转换成后缀式 SDUT 2132

2015-08-17 10:53 429 查看

题目描述

对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。

输入

输入一个算术表达式,以‘#’字符作为结束标志。

输出

输出该表达式转换所得到的后缀式。

示例输入

a*b+(c-d/e)*f#


示例输出

ab*cde/-f*+


转的,解释的挺详细。

#include<stdio.h>
int swi(char c))//把输入的运算符转换成数字来比较优先级
{
if(c=='+'||c=='-') return 1 ;
if(c=='*'||c=='/') return 2 ;
if(c=='(')  return 3 ;
if(c==')')  return 4 ;
return 0 ;
}
int main()
{
int top = 0 ;
char c=0, stack[100] ;
while(scanf("%c", &c), c!='#')
{
if(c>='a'&&c<='z')//判断字符是不是运算符 不是就输出
{
printf("%c", c) ;
}
else
{
if(top==0)//判断b栈是不是为空 是就直接入栈
{
top++ ;//栈顶向上移一位
stack[top] = c ;//增加一个成员
}
else
if(swi(c)>=swi(stack[top]))]))//如果是运算符 而且输入的比栈顶运算符优先级高
{
if(swi(c)==4))//如果是')'就把'('之前的运算符全部输出
{
while(stack[top]!='(')
{
printf("%c",stack[top--]) ;
}
top-- ;
}
else
{
top++ ;//如果不是 就入栈
stack[top] = c ;
}
}
else//如果优先级比它低
{
if(stack[top]!='(')//如果不是'(' 就把它(优先级高)出栈
{
printf("%c", stack[top]) ;
stack[top] = c ;
}
else
{
top++ ;
stack[top] = c ;//如果是'(' 就直接入栈
}
}
}
}
while(top!=0)//判断栈是否为空 不为空就全部出栈
{
printf("%c", stack[top]) ;
top-- ;
}
printf("\n") ;
return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: