题目描述
后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将后缀表达式的结果计算出来。
输入
后缀表达式。以#号作为表达式结束标志。为了简单,处理的数据为0-9的整数。输出
计算结果。样例输入
3 6 6 2 / - 3 * +#样例输出
12#include<iostream> #include<malloc.h> #include<cstring> using namespace std; #define INF 0x3f3f3f3f #define M 1000 typedef struct { int data[M]; int top; }mystack; void initstack(mystack*&s) { s=(mystack*)malloc(sizeof(mystack)); s->top=-1; } void push(mystack*&s,int ch) { s->top++; s->data[s->top]=ch; } void pop(mystack*&s) { s->top--; } int gettop(mystack*s) { return s->data[s->top]; } int main() { mystack*s; initstack(s); char ch; char x,y,num; for(;ch!='#';) { cin>>ch; if(ch>='0'&&ch<='9') { ch-='0'; push(s,ch); } if(ch=='+') { x=gettop(s); pop(s); y=gettop(s); pop(s); num=y+x; push(s,num); } if(ch=='-') { x=gettop(s); pop(s); y=gettop(s); pop(s); num=y-x; push(s,num); } if(ch=='*') { x=gettop(s); pop(s); y=gettop(s); pop(s); num=y*x; push(s,num); } if(ch=='/') { x=gettop(s); pop(s); y=gettop(s); pop(s); num=y/x; push(s,num); } } cout<<gettop(s); return 0; }
SWUST OJ1043: 利用栈完成后缀表达式的计算
最新推荐文章于 2022-05-30 12:00:03 发布