前几天,我们. net老师请我们制作了一台网络计算机,熟悉Vs环境,为图在网上下载公式对C#版进行了评测
非常容易使用,作业很好。
之后,他注意到久违地制作了数据结构性的东西,萌发了编写公式进行评价的Java实现。 是重复工作吧。
网络资源很多,但大部分很乱,所以今天详细总结。
首先,让我谈谈设计理念:
转换过程包括使用以下算法读取骑马订操作数、操作符和括号:
初始化空堆栈,并清空结果字符串变量。
从左向右一个字符一个字符地读取骑马订格式。
如果字符是操作数,则将其添加到结果字符串中。
如果字符是运算符,则弹出pop运算符,直到遇到右括号、低优先级运算符或相同优先级的右联接符号。 将此操作员推入堆栈。
如果字符是右括号,请将其推入堆栈。
如果字符是右括号,则在遇到右括号之前弹出所有操作符,并将其添加到结果字符串中。
到达输入字符串的末尾时,所有操作符都将弹出并添加到结果字符串中。
后缀表达式的评价
后缀表达式的评估比直接评估骑马订表达式更容易。 后缀表达式不需要括号,操作符的优先级也不再起作用。 可以使用以下算法评估后缀表达式:
初始化空堆栈
从左向右读取后缀表达式
如果字符是操作数,请将其推入堆栈。
如果字符是操作符,则发出两个操作数,执行相应的操作,然后将结果推入堆栈。 如果无法弹出两个操作数,则后缀表达式语法不正确。
从堆栈中弹出结果,直到后缀表达式的末尾。 如果后缀表达式的格式正确,则堆栈必须为空。
这是整体的想法。 具体细节请看我的代码。 也有评论。
当然程序可能有漏洞,如果发现未知错误,请联系我,直接回复或发邮件
Westmoon@yeah.net也可以。 谢谢你。
扩展内容:
上述方法是逆波兰式评价(后缀),是先按优先顺序排序再计算的方法,真正的任务是
字符串转换,也就是将骑马订表达式转换为后缀表达式的方法。
但是,网上也有可以直接评价骑马订形式的做法。 还没有看到具体的想法
如果有感兴趣的希望的话请告诉我。 谢谢你。