首页 > 代码库 > 【后序式的运算】
【后序式的运算】
/*后序式的运算 说明:将中序式转换为后序式的好处是,不用处理运算子先后顺序问题,只要依序由运算式由前往后读取即可。解法:运算时由后序式的前方开始读取,遇到运算元先存入堆叠,如果遇到运算子,则由堆叠中取出两个运算元进行对应的运算,然后将结果存回堆叠,如果运算式读取完毕,那么堆叠顶的值就是答案了,例如我们计算12+34+* 这个运算式(也就 是(1+2)*(3+4) ): 读取 堆叠1 12 12+ 33 33 (1+2后存回)4 334+ 37 (3+4后存回)* 21 (3*7后存回)*/ #include <stdio.h>#include <stdlib.h>void evalPf(char* );double cal(double, char, double);int main(void){ char input[80]; printf("input the postfix: "); scanf("%s", input); evalPf(input); return 0;}void evalPf(char* postfix){ double stack[80] = {0.0}; char temp[2]; char token; int top = 0, i = 0; temp[1] = ‘\0‘; while(1) { token = postfix[i]; switch(token) { case ‘\0‘: printf("ans = %f \n", stack[top]); return; case ‘+‘: case ‘-‘: case ‘*‘: case ‘/‘: stack[top-1] = cal(stack[top], token, stack[top-1]); top--; break; default: if(top < sizeof(stack) / sizeof(float)) { temp[0] = postfix[i]; top++; stack[top] = atof(temp); } break; } i++; }}double cal(double p1, char op, double p2){ switch(op) { case ‘+‘: return p1 + p2; case ‘-‘: return p1 - p2; case ‘*‘: return p1 * p2; case ‘/‘: return p1 / p2; }}
【后序式的运算】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。