这样子用栈有什么问题嘛?
咋没办法实现进栈呢?
完整代码:
#include<stdio.h>
#include<string.h>
#define MAXSIZE 100
typedef struct
{
int data[MAXSIZE];
int top;
}stack;
void push(stack S,int z)
{
S.data[S.top]=z;
S.top++;
return;
}
int pop(stack S)
{
return S.data[--S.top];
}
int main()
{
stack S;
S.top=0;
char bds[20][5]={0};
char a[5]={0};
int n=0;
int x,y;
for(int i=0;;i++)
{
scanf("%s",&a);
if(a[0]=='#')
break;
else
{
strcpy(bds[i],a);
n++;
}
}
for(int i=0;i<n;i++)
{
if(bds[i][0]!='+'&&bds[i][0]!='-'&&bds[i][0]!='*'&&bds[i][0]!='/')
{
int k=0;
if(strlen(bds[i])=='1')
k=bds[i][0]-'0';
else
{
if(bds[i][0]=='-')
{
for(int j=1;j<strlen(bds[i]);j++)
k=k*10+(bds[i][j]-'0');
}
else
{
for(int j=0;j<strlen(bds[i]);j++)
k=k*10+(bds[i][j]-'0');
}
}
push(S,k);
}
else
{
x=pop(S);
if(S.top==0)
{
printf("Expression Error:%d",x);
break;
}
else
{
y=pop(S);
switch(bds[i][0])
{
case '+':push(S,x+y);
case '-':push(S,x-y);
case '*':push(S,x*y);
case '/':
{
if(y==0)
printf("Error:%d/0",x);
else push(S,x/y);
}
}
}
}
}
if(S.top==1)
printf("%d",S.data[0]);
else printf("Expression Error:%d",S.data[S.top-1]);
return 0;
}