数据结构实验之栈三:后缀式求值
Time Limit: 1000MS Memory limit: 65536K
题目描述
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
输入
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
输出
求该后缀式所对应的算术表达式的值,并输出之。
示例输入
59*684/-3*+#
示例输出
57
#include <iostream> #include <algorithm> #include <cstring> #define sqmax 1010 using namespace std; typedef struct { int *base; int *top; int sqsize; } sq; int init(sq &s); void push(sq &s,int n); int pop(sq &s); int empty(sq &s); int main() { char c[260]; sq s; int n,m,p,l,i,t; while(cin>>c!=NULL) { init(s); l=strlen(c); for(i=0; i<l; i++) { if(c[i]>='0'&&c[i]<='9') push(s,c[i]-48); if(c[i]=='+') push(s,pop(s)+pop(s)); if(c[i]=='*') //cout<<pop(s)<<endl; push(s,pop(s)*pop(s)); if(c[i]=='-') { t=pop(s); push(s,pop(s)-t); } if(c[i]=='/') { t=pop(s); push(s,pop(s)/t); } if(c[i]=='#') { while(!empty(s)) cout<<pop(s)<<endl; break; } } } } int init(sq &s) { s.base=(int *)malloc(sqmax *sizeof(int)); if(!s.base) exit(0); s.top=s.base-1; s.sqsize=sqmax; return 1; } void push(sq &s,int n) { *++s.top=n; //cout<<" "<<n<<endl; } int pop(sq &s) { return *s.top--; } int empty(sq &s) { if(s.top==s.base-1) return 1; else return 0; }
提示
基本操作数都是一位正整数!