首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++经典算法题-后序式的运算

C++经典算法题-后序式的运算

作者头像
cwl_java
发布2020-02-13 23:25:29
发布2020-02-13 23:25:29
4750
举报
文章被收录于专栏:cwl_Javacwl_Java

23.Algorithm Gossip: 后序式的运算

说明

将中序式转换为后序式的好处是,不用处理运算子先后顺序问题,只要依序由运算式由前往后读取即可。

解法

运算时由后序式的前方开 堆叠始读取,遇到运算元先存入堆叠,如果遇到运算子,则由堆叠中取出两个运算元进行对应的运算,然后将结果存回堆叠,如果运算式读取完 毕,那么堆叠顶的值就是答案了, 例如我们计算12+34+这个运算式(也就是(1+2)*(3+4)): 读取

代码语言:javascript
复制
1	1
2	1 2
+	3 // 1+2 后存回
3	3 3
4	3 3 4
+	3 7 // 3+4 后存回
*	21 // 3 * 7  后存回

代码示例

代码语言:javascript
复制
#include<stdio.h> 
#include<stdlib.h>

    void evalPf(char*);

    double cal(double, char, double);

    int main(void) {
        char input[ 80];

        printf("输入后序式:");
        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);


                }
                i++;
            }
        }

    }
	break;


    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;
        }
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/01/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 23.Algorithm Gossip: 后序式的运算
    • 说明
    • 解法
    • 代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档