当前位置:首页 > 日记 > 正文

用逆波兰计算工资的PHP方法

用逆波兰计算工资的PHP方法
本文的示例说明PHP使用逆波兰计算工资的方法:

一般的中等阶表达式转化为逆波兰表达式的一般算法是:

我们需要分配2层作为临时存储运算符栈S1(包括结束,一个符号)作为输入的逆波兰式栈S2(空栈),S1栈可以放在最低优先级的操作符#,注意,这应该是最低的优先级中缀操作符结束。您可以指定其他角色,不一定#没有。从中缀左提取特征,以通过以下步骤:

(1)如果提取的字符是操作数,则对完整的操作数进行分析。操作数直接发送到S2堆栈。如果操作员被取出,S1堆栈的顶部是,当前操作符直接进入S1堆栈。

(2)如果字符不在运算符、运算符和S1堆栈堆栈元素中,如果运算符优先于堆栈堆栈运算符优先权,则堆栈堆栈中的S1堆栈中的运算符或S1会弹出到S2堆栈中,直到S1堆栈。低于顶级运算符(不包括等于)运算符优先级,运算符进入S1堆栈。

(3)如果字符被选中,它将直接发送到S1堆栈的顶部。

(4)如果提取的字符是),最接近S1堆栈顶部的操作符依次被发送到S2堆栈,然后在此时被丢弃。

(5)重复上面的1~4步,直到所有输入字符完成为止。

(6)如果字符被删除#,那么所有的S1运算符栈(不包括#),一个一个出栈,变成S2栈。

为了完成上述步骤,S2堆栈是波兰输出的逆,但是S2应该做一个逆序,可以根据逆波兰类型的计算方法来计算。

的math_rpn.php文件如下:
< PHP

* math_rpn
*
*逆波兰算法的实现
*
* /
类math_rpn {
初始计算公式
私人_expression美元=;
治疗后的抗波兰处方
私人_rpnexp美元=阵();
数组堆栈结构的模拟
私人_stack美元=阵列(' #);
/普通法官
/ /私人_reg美元({就 = / ^() * + / } * $ );
优先级
私人_priority美元=阵列(' #= > 0,'(' = >+= > 10, 20, 20''=>*、=>30,>30);
四操作
私人_operator美元=阵列('(',' + ',' ',' ','或',')');
公共功能__construct($表达式){
美元-> _init($表达);
}
私有函数_init($表达式){
美元-> _expression = $表达;
}
公共功能exp2rpn(){
$ len = strlen(美元-> _expression);
($ i = 0;$ i;
$字符= substr(美元-> _expression,我,1);
如果($ ={({))
美元-> _stack { } = $字符;
继续;
否则如果(!in_array($字符,美元-> _operator)){
美元-> _rpnexp { } = $字符;
继续;
}($ char = if){
为(J =计数(美元-> _stack);J > = 0;J—){
TMP = array_pop美元(美元-> _stack);
如果($ = )( {)
打破;
{人}
美元-> _rpnexp { } = $ TMP;
}
}
继续;
} else if($这-> _priority {字符} {结束_priority美元(美元-> _stack)}){
美元-> _rpnexp { } = array_pop(美元-> _stack);
美元-> _stack { } = $字符;
继续;
{人}
美元-> _stack { } = $字符;
继续;
}
}
(我=计数为美元(美元-> _stack);$我> = 0;$我--){
如果(结束(美元-> _stack)=打破#);
美元-> _rpnexp { } = array_pop(美元-> _stack);
}
返回_rpnexp美元->;
}
}
测试用例
表达式$ (*(b + C)- E + F);
var_dump($表达);
mathrpn =新math_rpn美元(美元的表达);
var_dump($ mathrpn -> exp2rpn());
* PHP结束/

希望本文能对大家的PHP程序设计有所帮助。

相关文章

如何在AI快速制作目录和舞蹈节技巧

如何在AI快速制作目录和舞蹈节技巧

舞蹈,快速,技巧,目录,如何在,本教程是向朋友介绍如何快速创建目录和安排段落在AI,这是非常实用和有用的朋友学习排版。我希望你喜欢他们。 本教程是介绍如何在ai的朋友目录和文本通道快速编排技巧,非常有用的教程,特别是对于学习排版的朋友来…

Excel数据集合Excel2007教程

Excel数据集合Excel2007教程

数据,教程,集合,电脑软件,Excel,欢迎大家来,这篇文章介绍了如何教你如何收集excel数据,欢迎大家阅读和学习。 从数据表中收集数据需要太多的时间。如果以通常的方式操作,它将花费太多的时间,当然有一些简单而快速的方法来完成。在这里,我将教您…

如何为WPS建立背景WPS文本教程

如何为WPS建立背景WPS文本教程

教程,文本,何为,背景,电脑软件,我们可以用WPS做很多事情。例如,传单和吸引人的话是不够的。我们可能需要设置背景来制作传单,下面的小编辑会教你如何设置WPS的背景,希望能对你有所帮助。 1,首先打开WPS,输入文本,然后单击页面布局。 2,然后点击图…

如何用漂亮美观的小户型装修与布置

如何用漂亮美观的小户型装修与布置

小户型,如何用,美观,漂亮,装修,小Huxing很受欢迎。它不比大家庭更难看。我们必须注意技巧。 目前房价高,很多人只能选择大户型的房子,小区面积小,各种生活区和生活设施都齐全,怎么装修都有问题。今天,让小编为你介绍一个小户型的装修用的搭配技…

ps快速绘制人物的几个步骤

ps快速绘制人物的几个步骤

绘制,快速,人物,几个步骤,电脑软件,本文主要介绍了ps在几个步骤中对人物画的描绘。教程很简单,你喜欢的朋友可以一起学习。 ps几个简单的画草图的步骤,使用粗糙的方法,有兴趣的可以试试。…

ps产生非常大气的三维立体效果。

ps产生非常大气的三维立体效果。

大气,三维立体,效果,电脑软件,ps,本教程是介绍给一个朋友谁使用PS创建非常大气三维立体效果。这个教程的效果真的很漂亮,非常适合海报设计。建议您喜欢的朋友一起学习教程。 本教程所教的PS学习者使用ps创建非常大气的三维立体效果。CS6版…

ps智能对象使用ps智能对象是什么

ps智能对象使用ps智能对象是什么

对象,智能,电脑软件,ps,智能对象是一个在PS图象处理软件最重要的功能。它是保护栅格或矢量图像原始数据,防止破坏性编辑的重要工具,但许多刚刚开始使用PS智能对象的朋友并不十分清楚。这里有一点关于PS智能对象的作用。让我们看一看。 PS学生…

PHP文件生成的图像不能使用CDN缓存

PHP文件生成的图像不能使用CDN缓存

缓存,图像,文件,解决方案,电脑软件,网上有一个问题今天发现,一张图片在域名前面,已经被添加到CDN缓存中,缓存不掉,利用php实现动态图片放大,但php处理图像输出,每次从后端读取,后台服务器压力增加,分析,处理304没有php, HTTP的原理就是这样,每个请求…

CDR为盛大开幕制作海报课程

CDR为盛大开幕制作海报课程

盛大,海报,课程,电脑软件,CDR,本教程是为一个朋友的一张盛大的开幕海报介绍一个CDR。本教程比较简单,效果也不是很好,但对于新手来说是值得学习的。 本教程教朋友用CDR制作一张盛大的开幕海报,这不是很难,制作的效果也是一般的,但从学习的角度来…

PS是如何在画面中镶嵌马赛克的

PS是如何在画面中镶嵌马赛克的

画面,如何在,电脑软件,PS,有时当你上传图片,一些隐私或不方便给别人看的东西不想上传,但只想上传这一个,你需要一个马赛克,所以如何玩PS图像拼接后Xiaobian引进的拼接方法,一起来看一下吧 随着社会的发展,信息不仅改变了飞入,视频,照片和人尤其是快…

如何在Word2003表格填色Word2003教

如何在Word2003表格填色Word2003教

教程,表格,如何在,电脑软件,一个长期使用单词的朋友不可避免地会使用表中的单词函数,但是在用word做表格后,我想把表的颜色设置成我喜欢的颜色,但是我不知道如何填充颜色。事实上,这个函数更隐蔽,没有显示出来。 1、表边框颜色设置 打开文件选…

PS模仿电影彩色海报教程

PS模仿电影彩色海报教程

教程,海报,彩色,电影,电脑软件,本教程是介绍朋友PS模仿电影制作七彩海报,制作的海报很好,难度也不大,很实用,建议大家一起学习吧。 这里我们带ps模仿电影制作多彩海报教程,希望大家喜欢! 以上是教程的结尾,PS模仿电影制作七彩海报教程,希望大家喜…