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 }
  • 相关阅读:
    ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
    循环读取list 的几种方法?
    jQuery里$(this)和this的区别在哪?
    Hibernate多对多双向关联需要注意的问题(实例说话)
    window.open()用法说明
    struts2 跳转类型 result type=chain、dispatcher、redirect(redirect-action)
    页面中的删除确认(ajax)、输入框中确认信息是否可用(ajax)的jquery代码
    理解ValueStack的基本机制 OGNL表达式
    Struts2中的ModelDriven机制及其运用
    mySQl数据库中不能插入中文的处理办法
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9094777.html
Copyright © 2011-2022 走看看