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


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

    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;  
    }  

  • 相关阅读:
    牛客多校第一场 A Equivalent Prefixes 单调栈(笛卡尔树)
    HDU多校第三场 Hdu6606 Distribution of books 线段树优化DP
    (待写)
    Hdu6586 String 字符串字典序贪心
    2019HDU多校第一场1001 BLANK (DP)(HDU6578)
    iOS触摸事件
    iOS获取相册/相机图片-------自定义获取图片小控件
    自定义表情输入框
    iOS版本、iPhone版本、Xcode版本比对
    Swift备忘录
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11782175.html
Copyright © 2020-2023  润新知