数据结构实验之栈与队列三:后缀式求值
Problem Description
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
Input
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
Output
求该后缀式所对应的算术表达式的值,并输出之。
Example Input
59*684/-3*+#
Example Output
57
Hint
基本操作数都是一位正整数!
#include <iostream>
#include <stdlib.h>
using namespace std;
#define SIZE 100
#define ADDSIZE 10
struct S
{
int stacksize;
int *top,*base;
};
void Inistack(S &s)
{
s.base=new int[SIZE];
s.top=s.base;
s.stacksize=SIZE;
}
void Push(S &s,int e)
{
if(s.top-s.base>=s.stacksize)
{
s.base=(int *)realloc(s.base,(s.stacksize+ADDSIZE)*sizeof(int));
s.top=s.base+s.stacksize;
s.stacksize+=ADDSIZE;
}
*s.top++=e;
}
int Pop(S &s)
{
return *--s.top;
}
int main()
{
S s;
Inistack(s);
while(true)
{
int t1,t2;
char c;
cin>>c;
if(c>='0'&&c<='9')
{
Push(s,c-'0');//传入数字
}
else
{
if(c=='+')
{
t1=Pop(s);
t2=Pop(s);
Push(s,t1+t2);
}
else if(c=='-')
{
t1=Pop(s);
t2=Pop(s);
Push(s,t2-t1);//注意t2与t1的顺序
}
else if(c=='*')
{
t1=Pop(s);
t2=Pop(s);
Push(s,t1*t2);
}
else if(c=='/')
{
t1=Pop(s);
t2=Pop(s);
Push(s,t2/t1);
}
else if(c=='#')
{
break;
}
}
}
cout<<*(s.top-1)<<endl;
return 0;
}