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

  • 相关阅读:
    11.重写、抽象、接口、异常
    3.用户组、指令运行级别、帮助指令、文件目录类(一)
    2.vi和vim编辑器、vi和vim三种模式、vi和vim快捷键、关机、重启命令、用户管理
    1.VM和Linux系统(centos)安装、linux目录结构、远程登录到Linux服务器、远程上传下载文件xftp
    10.函数、流程控制
    9.变量、存储过程
    8.事务、视图
    7.库和表的管理、常见数据类型、常见约束、标识符
    CH6801 棋盘覆盖(二分图最大匹配)
    洛谷P1525 关押罪犯(二分图判定+二分)
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11782175.html
Copyright © 2011-2022 走看看