栈之后缀式求值

来源:互联网 发布:淘宝女包货源免费代理 编辑:程序博客网 时间:2024/06/05 07:45

题目描述

对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。

输入

输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。

输出

求该后缀式所对应的算术表达式的值,并输出之。

示例输入

59*684/-3*+#

示例输出

57

提示

基本操作数都是一位正整数!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxsize 1000
#define sizenum 1000
typedef int element;
typedef struct
{
   element*top;
   element*base;
   int stsize;
}sq;
int intistack(sq*s)
{
   s->base=(element*)malloc(maxsize*sizeof(element));
   if(!s->base)
    return -1;
   s->top=s->base;
   s->stsize=maxsize;
   return 0;
}
int push(sq*s,char *t)
{
   if(s->top-s->base>s->stsize)
   {
      s->base=(element*)realloc(s->base,(s->stsize+sizenum)*sizeof(element));
      if(!s->base)
        return -1;
       s->top=s->base+s->stsize;
       s->stsize+=sizenum;
   }
   *(++s->top)=*t-'0';
   return 0;
}
void chuli(sq*s,char a[])
{
   int i,len=strlen(a);
   for(i=0;i<=len-1;i++)
   {  if(a[i]=='#')
         break;
      if('0'<=a[i]&&a[i]<='9')
        push(s,&a[i]);
      else
      {switch(a[i])
      {
         case '+':*(s->top-1)+=*(s->top);
                   break;
         case '-':*(s->top-1)-=*(s->top);
                   break;
         case '*':*(s->top-1)*=*(s->top);
                   break;
         case '/':*(s->top-1)/=*(s->top);
                   break;
      }
      s->top--;
      }
   }
    printf("%d\n",*(s->top));

}
int main()
{
    char a[maxsize];
    sq s;
    while(gets(a)!=NULL)
    {
       intistack(&s);
       chuli(&s,a);

    }

    return 0;
}

//读到数字则进栈读到运算符对栈顶两元素运算赋给*(s->top-1),然后栈顶出栈

0 0