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

mac2022-06-30  16

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

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

相关资源:后缀表达式转换求值 数据结构
最新回复(0)