数据结构实验之栈三:后缀式求值
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;
}