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

  • 相关阅读:
    Excel常用公式函数之文本查找某个符号
    Excel常用公式函数之日期格式转换成文本格式
    Excel常用公式函数之数据是否相等
    Excel常用公式函数之数据筛选、数据统计
    Excel常用公式函数之字符串拼接、字符串连接
    Excel常用公式函数之MID文本提取
    Excel常用技巧汇总
    netty面试题整理
    mqtt通配符订阅
    SQL | substring_index 字符串拆分
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/6444635.html
Copyright © 2011-2022 走看看