栈实现中锥表达式转后缀表达式,保存并计算

码蹄疾 2012-11-14 11:36:46
这是我们数据结构的作业,我只会实现那些数是int 型的,不会实现浮点型的,求破!
...全文
174 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
码蹄疾 2012-11-18
  • 打赏
  • 举报
回复
引用 2 楼 washingtonDC 的回复:
楼主的意思我不太明白,再确认一下。你能处理整型的实现,比如3*4+5*(8+2),但是不能实现浮点型,比如3.0*4.5+5.2*(8+2)是不是这个意思?利用c库函数scanf(),会发现处理整形和浮点型的区别不大的。两种情况都分三部骤,第一词法分析就是把键盘输入的表达式分解成一个一个的元素,包括数字和运算符。第二阶段可以采用栈转化中缀为后缀;第三阶段用对后缀表达式求值……
谢谢,我已经敲完啦!只不过有点麻烦,写啦200行,这个是我们的大二数据结构实验,我们老师要求栈什么的都自己写,我的思路是这样的: 1.中缀表达式转化为后缀表达式 从左向右一次扫描,遇到数与符号之间留一个空格,一个数的各位之间不留空格,这样把后缀表达式存放在数组中 2.处理就散中缀表达式
washingtonDC 2012-11-15
  • 打赏
  • 举报
回复
楼主的意思我不太明白,再确认一下。你能处理整型的实现,比如3*4+5*(8+2),但是不能实现浮点型,比如3.0*4.5+5.2*(8+2)是不是这个意思?利用c库函数scanf(),会发现处理整形和浮点型的区别不大的。两种情况都分三部骤,第一词法分析就是把键盘输入的表达式分解成一个一个的元素,包括数字和运算符。第二阶段可以采用栈转化中缀为后缀;第三阶段用对后缀表达式求值,这一阶段也需要用到第一阶段的词法分析。第一阶段是处理整型和浮点型的一个区别点。下面是个实现第一阶段的小例子,例子里只打印分割出的元素,楼主可以把分割出的元素进行压栈。 ------------------------- 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <ctype.h> 4 int main(int argc, char *argv[]){ 5 char c; 6 double element; 7 printf("please input an expression:\n"); 8 while(1){ 9 while((c=getchar())==' '||c=='\t'); 10 if(c=='\n'||c==EOF) break; 11 if(c=='.'||isdigit(c)){ 12 ungetc(c,stdin); 13 /*get element:%lf for float ,%d for int*/ 14 scanf("%lf",&element); 15 /*can use element for futher operation, here just print it*/ 16 printf("%lf\n",element); 17 } 18 else{ 19 printf("%c\n",c); 20 } 21 } 22 return 0; 23 } ----------------------------------------------- 运行情况: please input an expression: 2*(3+4.5)-6.8 2.000000 * ( 3.000000 + 4.500000 ) - 6.800000
码蹄疾 2012-11-14
  • 打赏
  • 举报
回复
实验要求: (1)从键盘输入任意一个语法正确的(中缀)表达式,显示并保存该表达式。 (2)利用栈结构,把上述(中缀)表达式转换成后缀表达式,并显示栈的状态变化过程和所得到的后缀表达式。 (3)利用栈结构,对上述后缀表达式进行求值,并显示栈的状态变化过程和最终结果。 求浮点型的怎么实现,老师要求的是语法正确就行,怎么破 啊! 只实现整形估计得分很少!

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧