zoukankan      html  css  js  c++  java
  • 【后序式的运算】

    /*
    后序式的运算
     
    说明:
    将中序式转换为后序式的好处是,不用处理运算子先后顺序问题,只要依序由运算式由前往后读取即可。
    
    解法:
    运算时由后序式的前方开始读取,遇到运算元先存入堆叠,如果遇到运算子,则由堆叠中取出两个运算元进行对应的运算,然后将
    结果存回堆叠,如果运算式读取完毕,那么堆叠顶的值就是答案了,例如我们计算12+34+* 这个运算式
    (也就 是(1+2)*(3+4) ): 
    读取    堆叠
    1        1
    2        12
    +        3
    3        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] = '';
        
        while(1)
        {
            token = postfix[i];
            switch(token)
            {
                case '':
                    printf("ans = %f 
    ", 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;
        }
    }

    运行结果:

  • 相关阅读:
    cmd设置代理
    移动端坐标定位tap
    T02-Django基本应用结构
    支持向量机算法的Sklearn完整复现
    T01-何为Django,入门"Hello World"
    决策树算法的Sklearn完整复现
    逻辑回归算法的Sklearn完整复现
    线性回归算法Sklearn完整复现
    K-近邻算法的Sklearn完整复现
    数据分析中的'疑难杂症'小结(三)
  • 原文地址:https://www.cnblogs.com/libra-yong/p/6360118.html
Copyright © 2011-2022 走看看