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

  • 相关阅读:
    python关于字典嵌套字典,列表嵌套字典根据值进行排序
    Linux安装pycharm并添加图标到桌面
    python_requests ~爬虫~小视频~~~
    Python如何实现doc文件转换为docx文件?
    python同时取每个列表的第一个元素
    python根据字典的值进行排序:
    lambda 函数的用法
    python的拷贝方式以及深拷贝,浅拷贝详解
    python实现快速排序
    python不使用系统库中的排序方法判断一个数组是否是有序数组
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11782175.html
Copyright © 2011-2022 走看看