逆波兰式编译不过去
#include <stdio.h>#include <stdlib.h>
#define MAXSIZE 100
typedef struct SqStack
{
char elem[MAXSIZE];
int top,base;
}stack;
void initstack(stack *s)
{
s->top=s->base=0;
}
int getTop(stack *s)
{
return s->top;
}
int push(stack *s,char e)
{
if(s->top==MAXSIZE-1)
{
printf("栈满溢出");
return 0;
}
else
{
s->elem[s->top++]=e;
}
return 1;
}
int stackempty(stack *s)
{
if(getTop(s)>0)
return 1;
else
return 0;
}
char pop(stack *s,char *e)
{
*e=s->elem[--s->top];
return *e;
}
char top(stack *s)
{
return s->elem[s->top-1];
}
int precede(char op)
{int x;
switch(op)
{
case '*':x=2;break;
case '/':x=2;break;
case '+':x=1;break;
case '-':x=1;break;
default:x=0;
}
return x;
}
char *repression(stack s,char *e)
{
char *c,ch,w;
int i=0,j=0;
c=(char *)malloc(sizeof(char)*20);
push(&s,'@');
ch=e[i++];
while(ch!=0)
{
if(ch=='(')
{
push(&s,ch);
ch=e[i++];
}
else if(ch==')')
{
while(top(&s)!='(')
{
pop(&s,c[j++]);
}
pop(&s,ch);
ch=e[i++];
}
else if(ch=='+'||ch=='-'||ch=='*'||ch=='/')
{
w=top(&s);
while(precede(w)>=precede(ch))
{
pop(&s,c[j++]);
w=top(&s);
}
push(&s,ch);
ch=e[i++];
}
else
{
c[j++]=ch;
ch=e[i++];
}
pop(&s,ch);
while(ch!='@')
{
c[j++]=ch;
pop(&s,ch);
}
return c;
}
}
main()
{char str[MAXSIZE];
char *e,*p;
int i=0;
stack s;
e=str;
p=(char *)malloc(sizeof(char));
initstack(&s);
do
{
scanf("%c",&str[i]);
i++;
}while(str[i]!=0&&i!=MAXSIZE-1);
p=repression(&s,e);
while(*p)
{
printf("%c",*p);
p++;
}
}