• 剑指offer:用两个栈实现一个队列


    题目

    用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

    解题思路

    用一个栈A来保存入栈,当要出栈的时候,将栈A的元素按照栈后进先出的特点转移到栈B中(此时栈A为空了)

    此时栈B中元素的保存顺序就是从上到下按照元素的进入顺序排列的,队列的pop操作只要按顺序拿取栈B的栈顶元素即可

    再有新元素入栈时,将将栈B的元素在装回A栈之后在装新元素

    代码

     1     Stack<Integer> stack1 = new Stack<Integer>();
     2     Stack<Integer> stack2 = new Stack<Integer>();
     3     
     4     public void push(int node) {
     5         while(!stack2.empty()){
     6             stack1.push(stack2.pop());
     7         }
     8         stack1.push(node);
     9     }
    10     
    11     public int pop() {
    12         while(!stack1.empty()){
    13             stack2.push(stack1.pop());
    14         }
    15         return stack2.pop(); 
    16     }

    扩展

    用两个队列来实现一个栈,完成栈的Push和Pop操作。 栈中的元素为int类型。

    入栈:将元素入队列A

    出栈:判断队列A的长度是否为1,若为1则出队列,否则将队列A的元素依次拿出并保存在队列B中直到队列A中剩一个元素,然后将这个元素出队列,

    然后将队列B的元素装回队列A

    与栈实现队列的区别:

    用队列模拟栈的时候,出栈之后要把队列B的元素在装回队列A中,否则队列A为空,遇到接连的出栈操作情况就会出错

    但是用栈模拟队列的时候,连续出队列操作可以连续从栈B中取栈顶元素,直到入栈操作才把栈B中的元素装入栈A

  • 相关阅读:
    Windows Phone开发(29):隔离存储C 转:http://blog.csdn.net/tcjiaan/article/details/7447469
    Windows Phone开发(25):启动器与选择器之WebBrowserTask 转:http://blog.csdn.net/tcjiaan/article/details/7404770
    内存知识集
    牛人榜
    如何解决SQL Server 2000 中的连接问题(邹建)
    索引
    .net事件机制
    内核对象
    使用socket tcp实现通讯
    sql技巧
  • 原文地址:https://www.cnblogs.com/huanglf714/p/11069009.html
Copyright © 2020-2023  润新知