• 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 }
  • 相关阅读:
    hdu 5015
    hdu 2276
    hdu 6197 array array array LIS
    poj 3070
    codefroce 854 A.Fraction
    sql数据库发布、订阅同步方式操作
    python排序(冒泡、直接选择、直接插入等)
    忘记mysql数据库密码时进行修改方法
    Word中图片自动编号且与文中引用的编号对应
    解决电脑本地网络连接显示红叉又可上网问题
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9094777.html
Copyright © 2020-2023  润新知