题目描述
输入
输出
示例输入
59*684/-3*+#
示例输出
57
 
 
 
#include <stdio.h>
 #include<stdlib.h>
 #define maxstack 1000
 #define stacknum 1000
 typedef struct
 {
     int *top,*base;
     int stacksize;
 }stack;
 void Initstack(stack &s)//栈的初始化;
 {
     s.base=(int *)malloc(maxstack*sizeof(int));
     if(!s.base) exit(0);//栈溢出;
     s.top=s.base;
     s.stacksize=maxstack;
 }
 void push(stack &s,char e)//进栈;
 {
     if(s.top-s.base>=s.stacksize)
     {
         s.base=(int *)realloc(s.base,(maxstack+stacknum)*sizeof(int));
         if(!s.base) exit(0);//栈溢出;
         s.top=s.base+s.stacksize;
         s.stacksize+=stacknum;
     }
     s.top++;//栈顶元素为e;
     *s.top=e;
 }
 int Empty(stack &s)//判断是否为空栈;
 {
     if(s.base==s.top)
         return 1;
         return 0;
 
 
 }
 void Pop(stack &s)//出栈;
 {
     if(!Empty(s))
         s.top--;
 
 
 }
 void print(stack &s)
 {//、栈内元素的输出;
     while(s.top!=s.base)
     {
         printf("%c",*s.top);
         Pop(s);
     }
     printf("\n");
 }
 void cal(stack &s,char st[],int n)//由栈的后缀式求值
 {
     int i,pr,la;
     int ch;
     for(i=1;i<=n;i++)
     {
         if(st[i]>='1'&&st[i]<='9')//数字进栈;
         {
             ch=(st[i]-'0');
             push(s,ch);
         }
         else if(st[i]=='+')//+号栈内两个数出栈计算再进栈;
         {
             pr=*s.top;
             s.top--;
             la=*s.top;
             *s.top=pr+la;
         }
         else if(st[i]=='*')
         {
             pr=*s.top;
             s.top--;
             la=*s.top;
             *s.top=pr*la;
         }
         else if(st[i]=='-')
         {
             pr=*s.top;
             s.top--;
             la=*s.top;
             *s.top=la-pr;
         }
         else if(st[i]=='/')
         {
             pr=*s.top;
             s.top--;
             la=*s.top;
             *s.top=la/pr;
         }
     }
     printf("%d\n",*s.top);
 }
 int main()
 {
     char ch,st[10000];
     int i=0;
     stack s;//栈的定义
     Initstack(s);//栈的初始化;
     while(~scanf("%c",&ch))
     {
         if(ch!='#')
             {
                   i++;
                   st[i]=ch;
             }
          else
                 break;
     }
     cal(s,st,i);
     return 0;
 }