假设表达式由单字母变量和双目四则运算算符构成。试编写程序,将一个通常书写形式且书写正确的表达式转换为逆波兰式。 |
输入由单字母变量和双目四则运算算符构成的表达式。 |
输出其逆波兰式。 |
(a+b)*c |
ab+c* |
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct
{
char *base;
char *top;
int size;
}sqstack;
void initstack(sqstack *s)
{
s->base=(char*)malloc(MAXSIZE*sizeof(char));
if(s->base==NULL)
exit(0);
s->top=s->base;
s->size=MAXSIZE;
}
void push(sqstack *s,char e)
{
if(s->top-s->base>=s->size)
{
s->base=(char*)realloc(s->base,100);
if(s->base==NULL)
exit(0);
s->top=s->base+s->size;
s->size=s->size+100;
}
*(s->top)=e;
s->top++;
}
void pop(sqstack *s,char *e)
{
*e = *--(s->top);
}
int len(sqstack s)
{
return (s.top-s.base);
}
int main()
{
sqstack s;
char c,e;
initstack(&s);
scanf("%c",&c);
while(c!='\n')
{
if(c>='a'&&c<='z')
printf("%c",c);
else if(')'==c)
{
pop(&s,&e);
while('('!=e)
{
printf("%c",e);
pop(&s,&e);
}
}
else if( '+' == c || '-' == c)
{
if( !len(s) )
{
push(&s, c);
}
else
{
do
{
pop(&s, &e);
if( '(' == e)
{
push(&s, e);
}
else
{
printf("%c", e);
}
}while( len(s) && '(' != e);
push(&s, c);
}
}
else if( '*' == c || '/' == c || '(' == c)
{
push(&s, c);
}
scanf("%c", &c);
}
while(len(s))
{
pop(&s,&e);
printf("%c",e);
}
return 0;
}