网站打开403,泗洪有做网站,孝感网站制作公司,计算机网站开发职业定位逆波兰表示法是一种将运算符#xff08;operator#xff09;写在操作数#xff08;operand#xff09;后面的描述程序#xff08;算式#xff09;的方法。举个例子#xff0c;我们平常用中缀表示法描述的算式#xff08;1 2#xff09;*#xff08;5 4#xff09;…逆波兰表示法是一种将运算符operator写在操作数operand后面的描述程序算式的方法。举个例子我们平常用中缀表示法描述的算式1 2*5 4改为逆波兰表示法之后则是1 2 5 4 *。相较于中缀表示法逆波兰表示法的优势在于不需要括号。 请输出以逆波兰表示法输入的算式的计算结果。
输入格式: 在一行中输入1个算式。相邻的符号操作数或运算符用1个空格隔开。 输出格式: 在一行中输出计算结果。 限制: 2≤算式中操作数的总数≤100 1≤算式中运算符的总数≤99 运算符仅包括“”、“-”、“*”操作数、计算过程中的值以及最终的计算结果均在int范围内。 输入样例1: 4 3 2 - 输出样例1: 5 输入样例2: 1 2 3 4 - * 输出样例2: -3 #includestdio.h
#includestdlib.h
#define MaxSize 199struct SNode{int Data[MaxSize];int Top;
};
typedef struct SNode *Stack;Stack CreateStack(){Stack p;p(Stack)malloc(sizeof(struct SNode));p-Top-1;return p;
}void Push(Stack S,int x){if(S-TopMaxSize){printf(Stack Full\n);}else{S-Data[S-Top]x;}
}int Pop(Stack S){if(S-Top-1){printf(Stack is Empty!\n);}else{int t;tS-Data[S-Top];S-Top--;return t;}
}int main(){Stack S;SCreateStack();char ch;chgetchar();int a,b,an,t;while(ch!EOF){if(ch0ch9){Push(S,ch-0);chgetchar();while(ch0ch9){tPop(S);Push(S,t*10ch-0);chgetchar();}}else if(ch||ch-||ch*){aPop(S);bPop(S);switch(ch){case :anba;break; case -:anb-a;break; case *:anb*a;break;}Push(S,an);}else if(ch\n){break;}chgetchar();}printf(%d,Pop(S));
}