数据结构实验之栈三:后缀式求值
来源:互联网 发布:java免费培训 编辑:程序博客网 时间:2024/06/05 07:02
数据结构实验之栈三:后缀式求值
Time Limit: 1000MS Memory limit: 65536K
题目描述
对于一个基于二元运算符的后缀表示式(基本操作数都是一位正整数),求其代表的算术表达式的值。
输入
输入一个算术表达式的后缀式字符串,以‘#’作为结束标志。
输出
求该后缀式所对应的算术表达式的值,并输出之。
示例输入
59*684/-3*+#
示例输出
57
提示
在字符串中,如果是数字,则进栈,如果是运算符则将栈中的前两个元素进行计算,然后删除栈中的前两个元素,并将新的计算结果入栈,全部完成后,出栈!
#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define maxstack 1000//栈的初始存储空间#define maxadd 100//栈的每次分配的增量typedef int Elemtype;typedef struct{ Elemtype *top;//栈顶 Elemtype *base;//栈底 int stacksize;//栈大小}qstack;//初始化栈int Initstack(qstack &s){ s.base=(Elemtype *)malloc(maxstack*sizeof(Elemtype)); if(!s.base) { exit(0); } s.top=s.base; s.stacksize=maxstack; return 0;}//进栈int Pushstack(qstack &s,char e){ if(s.top-s.base>=s.stacksize)//栈满,追加开辟存储空间 { s.base=(Elemtype *)realloc(s.base,(maxstack+maxadd)*sizeof(Elemtype)); if(!s.base) { exit(0); } s.top=s.base+maxstack; } if(e>='0'&&e<='9') { *s.top++=(e-'0');//将字符型转化成整型 } else if(e=='+'||e=='-'||e=='*'||e=='/')//对栈的前两个数字进行运算 { if(e=='+') { int t,t1,t2; t=0; t1=*(s.top-1); *(s.top--); t2=*(s.top-1);//注意:这个地方是减1而不是减2! *(s.top--); t=t1+t2; *(s.top++)=t; } else if(e=='-') { int t,t1,t2; t=0; t1=*(s.top-1); *(s.top--); t2=*(s.top-1); *(s.top--); if(t1>=t2) { t=t1-t2; } else { t=t2-t1; } *(s.top++)=t; } else if(e=='*') { int t,t1,t2; t=0; t1=*(s.top-1); *(s.top--); t2=*(s.top-1); *(s.top--); t=t1*t2; *(s.top++)=t; } else if(e=='/') { int t,t1,t2; t=0; t1=*(s.top-1); *(s.top--); t2=*(s.top-1); *(s.top--); if(t1>=t2) { t=t1/t2; } else { t=t2/t1; } *(s.top++)=t; } } return 0;}//出栈void Putstack(qstack &s){ while(s.top>s.base) { printf("%d",*(--s.top)); }}int main(){ char a[1000]; qstack s; Initstack(s);//初始化栈 for(int i=0; ;i++) { scanf("%c",&a[i]); if(a[i]=='#') break; Pushstack(s,a[i]);//进栈 } Putstack(s);//出栈 return 0;}
0 0
- SDUT2133数据结构实验之栈三:后缀式求值(栈)
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- SDUT 2133 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- SDUT 2133 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值
- SDUT 3133 数据结构实验之栈三:后缀式求值
- 数据结构实验之栈三:后缀式求值 SDUT 2133
- 数据结构实验之栈三:后缀式求值
- 圈地计划
- hd 1181 变形课(dfs)
- GIT和SVN之间的五个基本区别
- webpack 不是内部命令
- TX1
- 数据结构实验之栈三:后缀式求值
- Linux 性能监控工具命令大全
- 树状数组+离散化——求大范围,大数数组的逆序数
- 剑指offer——复杂链表的复制
- 2016/07/28 循环
- 使用USART接口进行STM32F0的在线升级(AN4065)-基于标准库的STM32F070的IAP移植手记
- pull解析
- 【Windows编程】Step.2 消息循环机制
- thinkphp复习