剑指offer之用两个栈实现队列
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解答:栈的特性是先进后出,而队列的特性是先进先出。
实现方法如下图:
在存入数据时,先将数据压入栈一,比如存入abc,之后要删除队列中第一个元素(a),此时,将栈一的数据压入栈二,按照栈顶出栈的顺序,栈底为c,之后为b,栈顶为a。此时弹出栈二的栈顶元素即为存入的第一个元素a。当插入元素时,还是将数据压入栈一。
于是在push函数中,执行将数据压入栈一即可
在pop函数中,首先判断栈二是否为空,为空则弹出栈二顶部的数据,不为空,就将栈一的数据全部压入栈二,再弹出栈二顶部数据。
这里再复习下Stack类,包含构造函数,empty函数,peek函数,pop函数,push函数,search函数。peek是返回栈顶元素,不过不移除,search的时间复杂度为O(n)。
代码如下:
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
//stack1用来存
public void push(int node) {
stack1.push(node);
}
//stack2用来弹出
public int pop() {
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.pop());
}
}
return stack2.pop();
}