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

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

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

原文地址:https://www.cnblogs.com/CCCrunner/p/6444635.html