数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Example Input
a*b+(c-d/e)*f#
Example Output
ab*cde/-f*+
Hint
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define Maxsize 10001
typedef char ElemType;
typedef struct
{
ElemType *top;
ElemType *base;
int stacksize;
} Stack;
int Creat(Stack *S)
{
S->base=(ElemType *)malloc(Maxsize*sizeof(ElemType));
if(!S->base)exit(0);
S->top=S->base;
S->stacksize=Maxsize;
return 0;
}
int Empty(Stack *S)
{
if(S->top==S->base)
return 1;
else
return 0;
}
int Push(Stack *S,ElemType e)
{
*(S->top++)=e;
}
int Pop(Stack *S)
{
S->top--;
printf("%c",*S->top);
return 0;
}
void Choose(Stack *S,char str[])
{
int i = 0;
while(str[i] != '#')
{
if(str[i] >= 'a'&&str[i] <= 'z')
{
printf("%c",str[i]);
}
else if(str[i] == '*' || str[i] == '/')
{
Push(S,str[i]);
}
else if(str[i] == '+' || str[i] == '-')
{
if(*(S->top-1) == '*' || *(S->top-1)== '/'|| *(S->top-1)== '+' || *(S->top-1) == '-')
{
Pop(S);
}
Push(S,str[i]);
}
else if(str[i]=='(')
{
Push(S,str[i]);
}
else if(str[i]==')')
{
while(*(S->top-1)!='(')
{
Pop(S);
}
S->top--;
}
i++;
}
while(S->base!=S->top)
{
Pop(S);
}
printf("\n");
}
int main()
{
Stack S;
Creat(&S);
char str[100];
scanf("%s",str);
Choose(&S,str);
printf("\n");
return 0;
}