zoukankan      html  css  js  c++  java
  • php实现栈的压入、弹出序列(**)(算法步骤)(画图)

    php实现栈的压入、弹出序列(**)(算法步骤)(画图)

    一、总结

    1、算法步骤一定要把算法步骤写下来,要不然太浪费时间了,尤其是思维不清晰的时候,尤其是题目有难度的时候,不然的话也非常容易出现低级错误
    2、画图,把算法步骤画出来

    二、php实现栈的压入、弹出序列

    题目描述

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

    三、代码

    代码一:(php没过)

     1 <?php
     2 //一定要把算法步骤写下来,要不然太浪费时间了,尤其是思维不清晰的时候
     3 //画图,把算法步骤画出来
     4 function IsPopOrder($pushV, $popV)
     5 {
     6     //当栈顶的元素小于出栈序列的头,就不停的入栈,直到没有数可以入
     7     //当栈顶的元素等于出栈队列的头,栈顶元素出栈,出栈队列后移,一直循环,如果出栈队列为空,则成功
     8     //当栈顶的元素大于出栈队列的头,return false
     9     $len=count($pushV);
    10     $i=0;
    11     $j=0;
    12     $stk=array();
    13     while($j<$len){
    14         if(empty($stk)&&$i<$len) array_push($stk,$pushV[$i++]);
    15         while(($top=array_pop($stk))<$popV[$j]&&$i<$len){array_push($stk,$top); array_push($stk,$pushV[$i++]);}
    16         while(array_pop($stk)==$popV[$j]&&$j<$len) {$j++; if($j>=$len) return true;}
    17         if(array_pop($stk)>$popV[$j]) return false;
    18     }
    19     return true;
    20     
    21 }

    代码二:php没过

     1 <?php
     2 //分类
     3 function IsPopOrder($pushV, $popV)
     4 {
     5     $stk=array();
     6     $ru=0;
     7     $chu=0;
     8     $i_stk=0;
     9     $len=count($pushV);
    10     while($chu<$len){
    11         if(empty($stk)&&$ru<$len) {$stk[]=$pushV[$ru++]; $i_stk++;}
    12         $top=$stk[$i_stk-1];
    13         //当栈顶元素小于出队序列元素时
    14         if($top<$popV[$chu]){
    15             $stk[]=$pushV[$ru++]; $i_stk++;
    16         }
    17         //等于
    18         if($top<$popV[$chu]){
    19             array_pop($stk); $i_stk--; $chu++;
    20         }
    21         
    22         //大于
    23         if($top>$popV[$chu]){
    24             return false;
    25         }
    26     }
    27     return true;
    28     //如果入栈序列为空并且出栈队列为空,return true
    29     //
    30  
    31 }
  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9094777.html
Copyright © 2011-2022 走看看