zoukankan      html  css  js  c++  java
  • PHP算法每日一练 堆栈(计算器)

      1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <head>
      4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      5 <title> 计算器 </title>
      6 <meta name="keywords" content="" />
      7 <meta name="description" content="" />
      8 </head>
      9 
     10 <body>
     11 <form>
     12 请输入一个表达式:<input type="text" name="exp" value="<?php echo $_GET['exp']; ?>">
     13 <input type="submit" value="计算">
     14 </br>
     15 </form>
     16 <?php
     17 $input  = $_GET['exp'];
     18 echo $input.'=';
     19 echo '<hr/>';
     20 $strStark  = new myStark();
     21 $numStark  = new myStark();
     22 for($i =0;$i<strlen($input);$i++){
     23     //逐行遍历
     24     if(!isOper($input[$i])){
     25         //数值入数栈
     26         if($i>0 &&  $isNum){
     27             $numStark->push($numStark->pop().$input[$i]);
     28         }else{
     29             $numStark->push($input[$i]);
     30         }
     31         $isNum = true; //标志为数
     32     }else{
     33         $isNum = false; //标志为非数
     34         while($strStark->isEmpty() && oper($strStark->getTop()) >= oper($input[$i])){
     35             $num1 = $numStark->pop();
     36             $num2 = $numStark->pop();
     37             $oper = $strStark->pop();
     38             $res = pay($num1,$oper,$num2);
     39             $numStark->push($res);
     40         }
     41         $strStark->push($input[$i]);
     42     }
     43 }
     44 while($strStark->isEmpty()){
     45     $num1 = $numStark->pop();
     46     $num2 = $numStark->pop();
     47     $oper = $strStark->pop();
     48     $res = pay($num1,$oper,$num2);
     49     $numStark->push($res);
     50 }
     51 echo $numStark->stark[$numStark->top];
     52 ?>
     53 </body>
     54 </html>
     55 
     56 <?php
     57 function isOper($str){
     58     if(in_array($str,array('+','-','*','/','(',')','[',']','{','}'))){
     59         return true;
     60     }else{
     61         return false;
     62     }
     63 }
     64 function oper($str){
     65     switch($str){
     66         case '+':case '-':
     67             $oper = 1;
     68             break;
     69         case '*':case '/':
     70             $oper =  2;
     71             break;
     72     }
     73     return $oper;
     74 }
     75 function pay($x,$str,$y){
     76     switch($str){
     77         case '+':$return = $x+$y;break;
     78         case '-':$return = $y-$x;break;
     79         case '*':$return = $x*$y;break;
     80         case '/':$return = $y/$x;break;
     81     }
     82     return $return;
     83 }
     84 class myStark{
     85     public $top = -1;
     86     public $maxStark = 5;
     87     public $stark = array();
     88     public function isEmpty(){
     89         if($this->top == -1){
     90             return false;
     91         }else{
     92             return true;
     93         }
     94     }
     95     /*栈顶*/
     96     public function getTop(){
     97         return $this->stark[$this->top];
     98     }
     99     /*入栈*/
    100     public function push($val){
    101         if($this->top > $this->maxStark - 1){
    102             return false;
    103         }
    104         $this->top ++;
    105         $this->stark[$this->top] = $val;
    106     }
    107     /*出栈*/
    108     public function pop(){
    109         if($this->top <= -1){
    110             return false;
    111         }
    112         $return = $this->stark[$this->top];
    113         $this->top -- ;
    114         return $return;
    115     }
    116     /*打印*/
    117     public function show(){
    118         for($i = $this->top;$i>-1;$i--){
    119             echo 'stack['.$i.']='.$this->stark[$i].'<br />';
    120         }
    121     }
    122 }
    123 
    124 ?>

    源代码下载:Calculator_1205.zip

  • 相关阅读:
    DIY 作品 及 维修 不定时更新
    置顶,博客中所有源码 github
    openwrt PandoraBox PBR-M1 极路由4 HC5962 更新固件
    使用 squid 共享 虚拟专用网至局域网
    第一次参加日语能力测试 N5
    libx264 libfdk_aac 编码 解码 详解
    开发RTSP 直播软件 H264 AAC 编码 live555 ffmpeg
    MFC Camera 摄像头预览 拍照
    http2 技术整理 nginx 搭建 http2 wireshark 抓包分析 server push 服务端推送
    plist 图集 php 批量提取 PS 一个个切
  • 原文地址:https://www.cnblogs.com/linzhenjie/p/2802361.html
Copyright © 2011-2022 走看看