码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指Offer】5、用两个栈实现队列

时间:2019-04-18 16:45:43      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:一个队列   队列   用两个   应该   队列实现   return   规律   turn   不难   

??题目描述:

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

??解题思路:

??本题的基本意图是:用两个后入先出的栈来实现先入先出的队列。对于这个问题,我们可以通过一个实例来进行具体分析。不难得出相应的规律:有两个栈stack1和stack2,每次向队列中插入元素可以都压入到stack1中,当需要从队列中删除元素时,我们应该是删除最早插入的那个(FIFO),这时可以将stack1中的元素逐个弹出并压入stack2,直到stack1为空,这时最早插入的元素就位于stack2的栈顶,可以直接弹出。

??因此,我们总结如下:压入元素时,都压入栈1,当需要弹出时,从栈2弹出,当栈2不为空时直接弹出栈顶元素,为空时将栈1的元素“倒进去”。

??举例:


技术图片

??编程实现(Java):

public class Solution {
    Stack<Integer> stack1 = new Stack<Integer>();
    Stack<Integer> stack2 = new Stack<Integer>();
   
    public void push(int node) {
        stack1.push(node);
    }
    
    public int pop() {
        if(stack2.empty()){  //为空时将栈1的元素“倒进去”
            while(!stack1.empty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }
}

??扩展:用两个队列实现一个栈

??用两个队列实现栈相比稍微复杂,当插入一个元素时,可以选择不为空的那个队列直接加进去,而当删除一个元素时,需要借助另一个空队列,首先依次删除原队列的头,并将删除的元素加入另一个队列,直到找到队列最后一个元素,将其删除,这时原来的数据队列变空,另一个队列变为数据栈。


技术图片

【剑指Offer】5、用两个栈实现队列

标签:一个队列   队列   用两个   应该   队列实现   return   规律   turn   不难   

原文地址:https://www.cnblogs.com/gzshan/p/10730367.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!