逆波兰表达式求值做数值计算性能怎么样

Java解析字符串表达式--逆波兰表达式的计算 - 推酷
Java解析字符串表达式--逆波兰表达式的计算
问题来由:
读入一个字符串形式的四则运算表达式,输出对应的计算结果。如读入的是“6 * ( 5 + ( 2 + 3) * 8 + 3)”,那么解析后的输出结果应为288。
一般的计算过程是这样的,首先计算优先级最高的小括号里面的内容,即“( 5 + ( 2 + 3) * 8 + 3)”,
将“2 + 3”的计算结果并存为A,接着用计算“A*8”,并存为B
计算“5+B+3”,结果存为C
最后计算“6*C”,计算完毕
我们可以将这种操作顺序书写如下:
6 5 2 3 + 8 * + 3 + *
这个记法就是逆波兰(reverse Polish)表达式,其求值过程恰好就是上面所描述的过程。逆波兰表达式又叫做后缀(postfix)表达式。在通常的表达式中,运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家 J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
后缀表达式的计算
计算后缀表达式最简单的方法就是使用一个栈:
当读到一个数字时就将它压入栈中
读到一个运算符时,就从栈中弹出两个数字,并将该运算符作用于这两个数字,然后将计算结果再压入栈中
下面演示下“6 5 2 3 + 8 * + 3 + *”的处理过程
首先读到 6 5 2 3 四个数字,没啥说的,直接打入栈中(6 5 2 3)
读到运算符“+”,从栈中弹出两个数字“3”、“2”,计算 3+2 = 5,将计算结果压入栈中;(6 5 5)
读到8,压入栈(6 5 5 8)
读到“*”,从栈中弹出两个数字“8”、“5”,计算 8 * 5 = 40,将计算结果压入栈中;(6 5 40)
读到“+”,从栈中弹出两个数字“40”、“5”,计算 40 + 5 = 45,将计算结果压入栈中;(6 45)
读到3,压入栈(6 45 3)
读到“+”,从栈中弹出两个数字“3”、“45”,计算 3 + 45 = 48,将计算结果压入栈中;(6 48)
读到“*”,从栈中弹出两个数字“48”、“6”,计算 48 * 6 = 288,计算完毕!!!
计算一个后缀表达式话费的时间是O(N),该算法的计算非常简单,同时不需要知道任何的计算优先级。
那么现在的问题就是如何将一个正常的表达式转换为后缀表达式???
且看下回分解。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致calculator 用MFC编的采用逆波兰表达式的小型计算器,可以进行进制转换 Windows Develop 238万源代码下载-
&文件名称: calculator
& & & & &&]
&&所属分类:
&&开发工具: Visual C++
&&文件大小: 2354 KB
&&上传时间:
&&下载次数: 4
&&提 供 者:
&详细说明:用MFC编的采用逆波兰表达式的小型计算器,可以进行进制转换-Edited by MFC uses Reverse Polish Notation small calculator that can convert hexadecimal
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&test12&&......\Debug&&......\.....\MyCal.obj&&......\.....\StdAfx.obj&&......\.....\test.exe&&......\.....\test.ilk&&......\.....\test.obj&&......\.....\test.pch&&......\.....\test.pdb&&......\.....\test.res&&......\.....\testDlg.obj&&......\.....\vc60.idb&&......\.....\vc60.pdb&&......\MyCal.cpp&&......\MyCal.h&&......\ReadMe.txt&&......\StdAfx.cpp&&......\StdAfx.h&&......\mycal_back.cpp&&......\mycal_back.h&&......\res&&......\...\test.ico&&......\...\test.rc2&&......\resource.h&&......\test.aps&&......\test.clw&&......\test.cpp&&......\test.dsp&&......\test.dsw&&......\test.h&&......\test.ncb&&......\test.opt&&......\test.plg&&......\test.rc&&......\testDlg.cpp&&......\testDlg.h
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 用c++实现的对游程编码的译码以及编码操作。对信息论一块的游程编码的理解具有一定参考价值。
&[] - Hard Disk Serial Number
&[] - 用VS2005编个计算器的小程序..
功能一般只实现了+ - * /,和进制转换功能.
&[] - 基于VS2010的最简单最基本的仿QQ应用程序}

我要回帖

更多关于 波兰表达式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信