zoukankan      html  css  js  c++  java
  • 数据结构实验之栈三:后缀式求值

    数据结构实验之栈三:后缀式求值

    Time Limit: 1000MS Memory limit: 65536K

    题目描述

    对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。

    输入

    输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。

    输出

    求该后缀式所对应的算术表达式的值,并输出之。

    示例输入

    59*684/-3*+#

    示例输出

    57




    #include<stdio.h>  
    #include<stdlib.h>  
    #define max 10  
    #define lmax 1000  
    typedef int element;  
    typedef struct                              //定义栈 的结构体
    {  
        element *base;                       //栈底
        element *top;                          //栈顶
        element size;                          //储存
    }st;  
    void initstack(st *s)          //栈的初始化
    {  
        s->base=(element *)malloc(lmax*sizeof(element));  
        s->top=s->base;  
        s->size=lmax;  
    }  
    void push(st *s,char str)   //进栈
    {  
        int t1,t2;  
        if(str>='0'&&str<='9')  //如果是数字,直接进栈
        {  
            (*s->top++)=str-'0';   //字符转化成整形数据
        }  
        else  
        {  
            if(str=='+')  
            {  
                t1=*--s->top;   //输出栈顶元素
                t2=*--s->top;   //再次输出栈顶元素
                (*s->top++)=t1+t2;   //后输入的与先输入的相加
            }  
            else if(str=='-')  
            {  
                t1=*--s->top;  //输出栈顶元素
                t2=*--s->top;  //再次输出栈顶元素
                (*s->top++)=t2-t1;   //后输入的与先输入的相
            }  
            else if(str=='*')  
            {  
                t1=*--s->top;  //输出栈顶元素
                t2=*--s->top;  //再次输出栈顶元素
                (*s->top++)=t1*t2;   //后输入的与先输入的相
            }  
            else if(str=='/')  
            {  
                t1=*--s->top;  //输出栈顶元素
                t2=*--s->top;  //再次输出栈顶元素
                (*s->top++)=t2/t1;   //后输入的与先输入的相除
            }  
        }  
    }  
    void put(st *s)  
    {  
        while(s->top>s->base)  
        {  
            printf("%d\n",*--s->top);   //输出最终结果
        }  
    }  
    int main()  
    {  
        char str;  
        st s;  
        initstack(&s);  
        while(scanf("%c",&str)!=NULL&&str!='#')  
        {  
            push(&s,str);  
        }  
        put(&s);  
        return 0;  
    }  

  • 相关阅读:
    【Language】 TIOBE Programming Community Index for February 2013
    【diary】good health, good code
    【web】a little bug of cnblog
    【Git】git bush 常用命令
    【web】Baidu zone ,let the world know you
    【diary】help others ,help yourself ,coding is happiness
    【Git】Chinese messy code in widows git log
    【windows】add some font into computer
    SqlServer启动参数配置
    关于sqlserver中xml数据的操作
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/6444635.html
Copyright © 2011-2022 走看看