zoukankan      html  css  js  c++  java
  • 数据结构和算法之栈和队列二:栈的压入,弹出序列

      当时我在学习这个的时候也是非常不理解这个问题,一个栈的压入和弹出序列的判断一看不就知道了么,还去判断干嘛。只要符合后进先出的规则就行。但是我在这里简单说一下这个压入和弹出序列是怎么回事。就是我们给定假设的两个序列,一个为压入序列,一个为弹出序列。然后我们再通过一个辅助的栈,把压入序列的数据一个一个push()进入临时的辅助栈中,如果栈顶元素刚好和弹出序列的数据一样,那么我们就弹出,如果不一样我们就将压入序列的数据继续压入临时栈中,直到到达序列结束。如果压入序列结束,临时栈全部数据弹出那么就是一个弹出压入或者弹出序列。直接上图理解一下:

                                     

      代码如下:

    public boolean isPopOrder(int arr1[],int arr2[]){
        //判断两个序列是否有空序列
        if(arr1.length == 0 || arr2.length == 0){
              return false;
        }
        //创建一个临时的辅助栈
        Stack<Integer> s = new Stack<>();
        //将数据压入栈中并进行比较
        for(int i = 0,j = 0;i < arr1.length;){
             s.push(arr1[i]);
             //判断栈顶元素是否和弹出序列一致
             while(s.size() > 0 && s.peek() == arr2[j]){
                  s.pop();
                  j++;
             }
        }
        return  s.isEmpty();
    }

       我上边的代码使用的数组来对序列进行实现。arr1表示压入序列,arr2表示弹出序列。关键我们需要抓住的是在压入时进行循环的弹出比较就行了,借助于一个临时栈对算法进行实现。

  • 相关阅读:
    LVS-三种负载均衡方式比较
    keepalived和heartbeat区别
    vmware-question
    SQL Server MYSQL 检查点的好处
    MYSQL 引擎的情况
    MYSQL 关闭服务的过程
    SQL Server 行的删除与修改-------------(未完待续P222 deep SQL Server 222 )
    SQL Server一些重要视图 1
    SQL Server 查看数据页面
    SQL Server 向堆表中插入数据的过程
  • 原文地址:https://www.cnblogs.com/zslli/p/8045938.html
Copyright © 2011-2022 走看看