/*其实完全不用建立结构体,但是由于刚学栈的结构体形式所以才用一下,希望王旭老师多多指教
*/
#include<stdio.h>
#include<stdlib.h>
struct stack
{
int c[100];
int top;
};
int Push ( struct stack *p,int n)
{
if( p->top == 49 )
return 0;
else
{
p->top++;
p->c[p->top] =n;
return 1;
}
}
int Pop ( struct stack *p,int *ch)
{
if( p->top==-1 )return 0;
else
{
*ch = p->c[p->top];
p->top--;
return 1;
}
}
int sw(char c)
{
if(c=='+' || c=='-') return 1;
if(c=='*' || c=='/') return 2;
if(c=='(') return 3;
if(c==')') return 4;
}
int jisuan(int x,int y,char c)
{
if(c=='+') return x+y;
if(c=='*') return x*y;
if(c=='-') return x-y;
if(c=='/') return x/y;
else return 0;
}
int main()
{
struct stack *p;
char ch;
int x,y,*q,i;int n;
p = (struct stack *)malloc(sizeof(struct stack));
p->top = -1; //指向栈底
while((ch=getchar())!='#')
{
if( ch>='1'&&ch<='9')
{
n = ch-48; //可以用atoi,而且用ch-'0'得到的n值不对;
Push(p,n); //数组的话直接a[top]=n,top++;
}
else
{
q=&i;
Pop(p,q);
x=*q;
Pop(p,q);
y=*q ;
y = jisuan(y,x,ch); //由于8/2式入栈的时候为82/,出栈的时候为2。/8所以应该换下位置
Push(p,y);
}
}
printf("%d",y);
}