首页 > 其他 > 详细

栈的应用实例——计算后缀表达式

时间:2014-03-21 08:04:06      阅读:348      评论:0      收藏:0      [点我收藏+]

bubuko.com,布布扣用户输入一个后缀表达式,程序计算该后缀表达式的值并输出结果:

bubuko.com,布布扣
/* postfix_expression.c */

#include "stack.h"
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int main()
{
    int i, flag;
    char c, data_string[10];
    float data, f1, f2, result;
    stack data_stack;
    
    data_stack = create_stack(100);
    printf("Please input a postfix expression:\n");

    i = 0;
    for(c = getchar(); c != \n; c = getchar())
    {
        switch(c)
        {
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:    
            case 9:
            case .:
                flag = 1;
                data_string[i++] = c;
                break;
            case  :
                if(flag == 1)
                {
                    data_string[i] = \0;
                    data = atof(data_string);
                    push(data, data_stack);
                
                    i = 0;
                    data_string[0] = \0;
                }
                break;
            case +:
                flag = 0;
                f1 = top_and_pop(data_stack);
                f2 = top_and_pop(data_stack);
                result = f1 + f2;
                push(result, data_stack);
                break;
            case -:
                flag = 0;
                f1 = top_and_pop(data_stack);
                f2 = top_and_pop(data_stack);
                result = f1 - f2;
                push(result, data_stack);
                break;
            case *:
                flag = 0;
                f1 = top_and_pop(data_stack);
                f2 = top_and_pop(data_stack);
                result = f1 * f2;
                push(result, data_stack);
                break;
            case /:
                flag = 0;
                f1 = top_and_pop(data_stack);
                f2 = top_and_pop(data_stack);
                result = f1 / f2;
                push(result, data_stack);
                break;
        }
    }
    result = top_and_pop(data_stack);
    printf("result = %.2f\n", result);
}
bubuko.com,布布扣

上面的程序中所使用的stack.h参考http://www.cnblogs.com/nufangrensheng/p/3610520.html。(注:stack.h中使用的是

typedef int element_type;

bubuko.com,布布扣测试实例:

后缀表达式 6 5 2 3 + 8 * + 3 + * 的中缀表达式(我们平常使用的形式)为:6 * { [ 5 + ( 2 + 3 ) * 8 ] + 3 } = 288.

测试结果:

bubuko.com,布布扣

栈的应用实例——计算后缀表达式,布布扣,bubuko.com

栈的应用实例——计算后缀表达式

原文:http://www.cnblogs.com/nufangrensheng/p/3615059.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!