用栈实现队列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用栈实现队列相关的知识,希望对你有一定的参考价值。

正如标题所述,你需要使用两个栈来实现队列的一些操作。

队列应支持push(element),pop() 和 top(),其中pop是弹出队列中的第一个(最前面的)元素。

pop和top方法都应该返回第一个元素的值。

比如push(1), pop(), push(2), push(3), top(), pop(),你应该返回1,2和2

 

思路:

1、push元素时,直接进栈stack1

2、pop或top时,判断stack2是否为空,若为空,将stack1中的元素逆序插入stack2。然后返回stack2.pop()  或 stack2.peek()。

 

知识点:

栈是Vector的一个子类,它实现了一个标准的后进先出的栈。堆栈只定义了默认构造函数Stack(),用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。

1、empty():测试堆栈是否为空

2、push(element):将项压入堆栈顶部

3、top():移除堆栈顶部的对象,并作为此函数的值返回该对象

4、peek():查看堆栈顶部的对象,但不从堆栈中移除

5、search():返回对象在堆栈中的位置,以1为基数。

 

 

代码:

public class MyQueue {
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;
    public MyQueue() {
        // do intialization if necessary
        stack1 = new Stack<Integer>();
        stack2 = new Stack<Integer>();
    }

    /*
     * @param element: An integer
     * @return: nothing
     */
    public void push(int element) {
        // write your code here
        stack1.push(element);
    }
    /*
     * @return: An integer
     */
    public int pop() {
        // write your code here
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.pop();
    }

    /*
     * @return: An integer
     */
    public int top() {
        // write your code here
        if(stack2.empty()){
            while(!stack1.empty()){
                stack2.push(stack1.pop());
            }
        }
        return stack2.peek();
    }
}

以上是关于用栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章

用栈实现队列

Leetcode——用栈实现队列

用栈实现队列和用队列实现栈

LeetCode-232-用栈实现队列

用栈实现队列,用队列实现栈,最小栈,设计循环队列的Java做法

用栈实现队列