• Algorithm Gossip (23) 后序式的运算


    前言

    This Series aritcles are all based on the book 《经典算法大全》; 对于该书的所有案例进行一个探究和拓展,并且用python和C++进行实现; 目的是熟悉常用算法过程中的技巧和逻辑拓展。

    提出问题

    23.Algorithm Gossip: 后序式的运算

    说明

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

    解法

    上一节已讲。

    分析和解释

    代码

    #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] = '';
        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;
            }
        }

    拓展和关联

    后记

    参考书籍

    • 《经典算法大全》
    • 维基百科
  • 相关阅读:
    PHP array_intersect_uassoc
    PHP array_intersect_key
    PHP array_intersect_assoc
    PHP array_flip
    PHP array_filter
    PHP array_fill
    PHP array_fill_keys
    Android4.0-Fragment框架实现方式剖析
    Fragment 生命周期
    WebView
  • 原文地址:https://www.cnblogs.com/actanble/p/6713393.html
Copyright © 2020-2023  润新知