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

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

2016-10-06 14:43 417 查看


Problem Description

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


Input

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


Output

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


Example Input

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



Example Output

ab*cde/-f*+



Hint

 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct hh
{
int data[10010];
int top;
};
void main()
{
struct hh *l,*x;
x=(struct hh *)malloc(sizeof(struct hh));
l=(struct hh *)malloc(sizeof(struct hh));
x->top=-1;
l->top=-1;
char a[10010];
int n,i;
scanf("%s",&a);
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]=='(')
{
x->top++;
x->data[x->top]=a[i];
}
else if(a[i]==')')
{
while(x->data[x->top]!='(')
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
x->top--;
}
else if(a[i]=='-'||a[i]=='+')
{
while(x->data[x->top]=='*'||x->data[x->top]=='/'||x->data[x->top]=='+'||x->data[x->top]=='-')
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
x->top++;
x->data[x->top]=a[i];
}
else if(a[i]=='*'||a[i]=='/')
{
while(x->data[x->top]=='*'||x->data[x->top]=='/')
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
x->top++;
x->data[x->top]=a[i];
}
else if(a[i]=='#')
{
while(x->top!=-1)
{
l->top++;
l->data[l->top]=x->data[x->top];
x->top--;
}
}
else
{
l->top++;
l->data[l->top]=a[i];
}
}
for(i=0;i<=l->top;i++)
printf("%c",l->data[i]);
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 数据结构 c语言
相关文章推荐