博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php--计算器的算法实现(-)
阅读量:6691 次
发布时间:2019-06-25

本文共 2536 字,大约阅读时间需要 8 分钟。

hot3.png

该方法只能进行每个数字符号是1位的操作运算。修改见更新。。。
php--计算器的算法实现(-)
isOper($ch)){ //是运算符 /** 3.如果发现是运算符 3.1 如果符号栈为空,就直接入符号栈 3.2. 如何符号栈,不为空,就判断 如果当前运算符的优先级小于等于符号栈顶的这个运算符的优先级,就计算,并把计算结果入数栈.然后把当前符号入栈 3.3 如何符号栈,不为空,就判断 如果当前运算符的优先级大于符号栈顶的这个运算符的优先级,就入栈. */ //如何符号栈,不为空, if($opeStack->isEmpty()==true){ $opeStack->push($ch); }else{ //符号栈不为空 //如果当前运算符的优先级小于等于符号栈顶的这个运算符的优先级,就计算 $chPRI=$opeStack->PRI($ch); $stackPRI=$opeStack->PRI($opeStack->getTop()); if($chPRI<=$stackPRI){ $num1=$numStack->pop(); $num2=$numStack->pop(); $ope=$opeStack->getTop(); $res=$opeStack->getResult($num1,$num2,$ope); $numStack->push($res); // $opeStack->push($ch); }else{ $opeStack->push($ch); } }//if结束 }else{ $numStack->push($ch); } ++$index; if($index==strlen($exp)){ break; }} while(!$opeStack->isEmpty()){ $num1=$numStack->pop(); $num2=$numStack->pop(); $ope=$opeStack->pop(); $res=$opeStack->getResult($num1,$num2,$ope); $numStack->push($res); }echo $numStack->getTop(); class MyStack{ private $top=-1; //模拟栈底,指向-1 private $maxSize=15; //模拟栈的容量为5 private $stack=array();//用来数组来模拟,想数组内填入栈的内容 //判断是否是运算符 public function isOper($ch){ if($ch=='+'||$ch=='-'||$ch=='*'||$ch=='/'){ return true; }else{ return false; } } //判断栈是否为空 public function isEmpty(){ if($this->top==-1){ return TRUE; }else{ return FALSE; } } //判断符号的优先级 public function PRI($ch){ if($ch=='*'||$ch=='/'){ return 1; }else if($ch=='+'||$ch=='-'){ return 0; } } //获得栈顶的值 public function getTop(){ return $this->stack[$this->top]; } //计算数值 public function getResult($num1,$num2,$ope){ $res=0; switch($ope){ case '+': $res=$num1+$num2; break; case '-': $res=$num2-$num1; break; case '*': $res=$num1*$num2; break; case '/': $res=$num2/$num1; break;//erqiqu huibohuayuan 155171111 86 } return $res; } //入栈操作 public function push($val){ ///先判断栈是否已满 if($this->top==$this->maxSize-1){ echo '栈满,不能添加
'; return; //栈满 返回 } //先top上移,然后填充栈内容 $this->top++; $this->stack[$this->top]=$val; } //出栈 public function pop(){ if($this->top==-1){ echo '栈111空
'; return; //空栈,无数据,返回 } //取出栈顶的数据,同时把该数据返回,别忘了把top指针下移 $topValue=$this->stack[$this->top]; $this->top--; return $topValue; } //显示栈的所有信息 public function showStack(){ if($this->top==-1){ echo '栈空!
'; return;//空栈,无数据,返回 } //结合堆栈的数据结构,是后进先出类型的,因此从栈顶开始,依次往下读出栈的内容 for($i=$this->top;$i>-1;$i--){ echo 'Stack['.$i.']='.$this->stack[$i].'
'; } } }?>

转载于:https://my.oschina.net/mojiadan/blog/114197

你可能感兴趣的文章
[转]UML类图、关系及其JAVA代码
查看>>
PhotoShop算法原理解析系列 - 像素化---》碎片。
查看>>
设计模式之责任链模式
查看>>
php多态设计
查看>>
mvc伪静态<三> IIS配置
查看>>
android自定义radiobutton样式文字颜色随选中状态而改变
查看>>
【CodeForces 604B】F - 一般水的题1-More Cowbe
查看>>
wxPython 4.0.0b2安装
查看>>
Android RecyclerView利用Glide加载大量图片into(Target)导致OOM异常
查看>>
UGUI表情系统解决方案
查看>>
HTTP Health Checks
查看>>
为什么正态分布如此普遍
查看>>
jQuery事件
查看>>
BBS论坛(三十)
查看>>
轻松看懂Java字节码
查看>>
AE TIN的切割
查看>>
ASP.NET图片上传,删除
查看>>
Visual Studio 2010 创建的WCF服务 第一个应用
查看>>
2016第42周五
查看>>
centos7 取消自动锁屏
查看>>