题目描述
输入
输出
示例输入
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;
}