数据结构实验之栈三:后缀式求值

来源:互联网 发布:猎头搜 知乎 编辑:程序博客网 时间:2024/04/27 16:02

数据结构实验之栈三:后缀式求值

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

59*684/-3*+#

示例输出

57

提示

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

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 10000
#define sizenum 10000
typedef struct
{
 int *base;
 int *top;
 int stsize;
}Sq;
int stack_Init(Sq*s)//?????§????
{
 s->base=(int *)malloc(maxsize*sizeof(int));
 if(!s->base)
exit(0);
 s->top=s->base;
 s->stsize=maxsize;
 return 1;
}
void push(Sq*s,char *e)
{
 if(s->top-s->base>s->stsize)
 {
   s->base=(int *)realloc(s->base,(s->stsize+sizenum)*sizeof(int));
   if(!s->base)
  exit(0);
   s->top=s->base+s->stsize;
   s->stsize+=sizenum;
 }
 *++s->top=*e-'0';


}
void choose(Sq*s,char a[])
{
int i,len=strlen(a);
 for(i=0;i<len;i++)
 {
  if(a[i]=='#')
 break;
  if(a[i]>='0'&&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()
{
 Sq s;
 char a[maxsize];
 gets(a);
 stack_Init(&s);
 choose(&s,a);
 return 0;


}


0 0
原创粉丝点击