注册建设通网站,旅游门户网站建设,网架结构,做好三步网站改版工具不降权 无忧老师后缀表达式计算
过程分析
中缀表达式 #xff08;15#xff09;*3 后缀表达式 153* (可参考这篇文章#xff1a;中缀转后缀) 第一步#xff1a;我们从左至右扫描 后缀表达式(已经存放在一个字符数组中)#xff0c;遇到第一个数字字符 ‘1’ 放入栈中第二步#xf…后缀表达式计算
过程分析
中缀表达式 15*3 后缀表达式 153* (可参考这篇文章中缀转后缀) 第一步我们从左至右扫描 后缀表达式(已经存放在一个字符数组中)遇到第一个数字字符 ‘1’ 放入栈中第二步接着扫描遇到数字字符 ‘5’,放入栈中第三步接着扫描遇到 运算字符 ‘’连着两次出栈b a计算 a 运算符 b 的值将其结果值放入栈中b5a1第四步接着扫描遇到数字字符 ‘3’ 放入栈中第五步接着扫描遇到运算字符 ‘*’ 连着两次出栈b a计算 a 运算符 b 的值将其结果只放入栈中b3a6第六步扫描结束返回栈顶元素
图解 代码分析 思路表达式存储在一个字符数组 exp[] 中遇到数值得时候 入栈遇到运算符的时候 出栈连续两次然后拿两个数值 a 和 b 以及运算符 Op 进行计算最后将计算结果再入栈直到遍历到字符数组结尾为止 // 运算函数用来计算 a Op b Op 是运算符
int op(int a , int b , char Op){if(Op )return a b;if(Op -)return a - b;if(Op *)return a * b;if(Op /){if(b 0){ // 分母不能为零coutERRORendl;}else{return a/b;}}
}// 计算后缀表达式
int com(char exp[]){int i , a , b , c;// 创建顺序栈int stack[maxSize];// 初始化栈顶指针int top -1;// 存储运算符char Op;for(i 0;exp[i] ! \0; i){if(exp[i] 0 exp[i] 9){ // 是数字stack[top] exp[i] - 0; // 将数字字符变成数字}else{Op exp[i];// 连续两次出栈b stack[top--];a stack[top--];c op(a , b , Op); // 计算结果stack[top] c; // 计算结果入栈}}return stack[top];
}