剑指offer-----用两个栈实现队列

import java.util.Stack;

/**
 * 剑指offer面试题7:用两个栈实现队列
 * 
 * 题目:用两个栈实现一个队列。完成队列的Push和Pop操作。队列的元素为int类型。
 * 
 * 考查:对栈和队列的理解,栈是先进后出,队列是先进先出
 * 
 * 思路:第一准备两个栈用于实现队列分别为instack和outstack;
 * 	        第二当有新元素入队时,将其压入instack中;
 *     第三当需要出队时,判断outstack是否为空,若是,将instack中的元素逐一弹出并压入outsatck中。将outstack的栈顶元素弹出.
 *     若不为空,直接弹出outstack的栈顶元素。
 * 
 * 总结:1.组合使用两个栈可以实现队列。
 *     2.两个栈实现的队列其操作的时间复杂度能够达到O(1)。
 *     3.两个栈实现队列的方法复用栈数据结构,实现过程简单且高效
 */
public class TwoStackGenerateQueue {
	
	static Stack<Integer> inStack = new Stack<Integer>();
	static Stack<Integer> outStack = new Stack<Integer>();
	
	public static void push(int node) {
		inStack.push(node);
	}
	
	public static int pop() {
		if(outStack.isEmpty()) {
			while(!inStack.isEmpty()) {
				outStack.push(inStack.pop());
			}
		}
		if(outStack.isEmpty()) {
			return -1;
		}
		return outStack.pop().intValue();
	}

	public static void main(String[] args) {
		push(1);
		push(2);
		push(3);
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
		System.out.println(pop());
	}

}

猜你喜欢

转载自blog.csdn.net/yb1020368306/article/details/81385865