数据结构实验之栈三:后缀式求值
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入
输出
示例输入
59*684/-3*+#
示例输出
57
#include<stdio.h>
#include<stdlib.h>
#define max 10
#define lmax 1000
typedef int element;
typedef struct //定义栈 的结构体
{
element *base; //栈底
element *top; //栈顶
element size; //储存
}st;
void initstack(st *s) //栈的初始化
{
s->base=(element *)malloc(lmax*sizeof(element));
s->top=s->base;
s->size=lmax;
}
void push(st *s,char str) //进栈
{
int t1,t2;
if(str>='0'&&str<='9') //如果是数字,直接进栈
{
(*s->top++)=str-'0'; //字符转化成整形数据
}
else
{
if(str=='+')
{
t1=*--s->top; //输出栈顶元素
t2=*--s->top; //再次输出栈顶元素
(*s->top++)=t1+t2; //后输入的与先输入的相加
}
else if(str=='-')
{
t1=*--s->top; //输出栈顶元素
t2=*--s->top; //再次输出栈顶元素
(*s->top++)=t2-t1; //后输入的与先输入的相减
}
else if(str=='*')
{
t1=*--s->top; //输出栈顶元素
t2=*--s->top; //再次输出栈顶元素
(*s->top++)=t1*t2; //后输入的与先输入的相乘
}
else if(str=='/')
{
t1=*--s->top; //输出栈顶元素
t2=*--s->top; //再次输出栈顶元素
(*s->top++)=t2/t1; //后输入的与先输入的相除
}
}
}
void put(st *s)
{
while(s->top>s->base)
{
printf("%d\n",*--s->top); //输出最终结果
}
}
int main()
{
char str;
st s;
initstack(&s);
while(scanf("%c",&str)!=NULL&&str!='#')
{
push(&s,str);
}
put(&s);
return 0;
}