面试题7:用两个栈实现队列

首先模拟一个队列,使用栈来定义:

package 剑指offer.queueAndStack;

import java.util.Stack;

public class Queue {
	// 两个栈实现队列
	private Stack s1;
	private Stack s2;

	public Queue() {
		this.s1 = new Stack();
		this.s2 = new Stack();
	}

	// 模拟在队尾插入数据,这个和其中一个栈插入数据方法一样的
	public void insertTail(int value) {
		s1.push(value);

	}

	// 模拟在队首输出数据
	// 我们从队列取出数据,可以从s1中取出数据装到s2中,然后从s2中取出数据,这样就交换了一次输出数据的顺序了
	public Object deleteHead() {
		while (!s1.isEmpty()) {
			s2.push(s1.pop());
		}

		return s2.pop();

	}
}

测试一波:

package 剑指offer.queueAndStack;

public class StackFormQueue {
	public static void main(String[] args) {
		Queue q = new Queue();
		// 存入数据
		for (int i = 0; i < 10; i++) {
			q.insertTail(i);
		}
		// 取出数据
		for (int i = 0; i < 10; i++) {
			System.out.print(q.deleteHead() + "  ");
		}

	}

}

控制台如下:

猜你喜欢

转载自blog.csdn.net/Handsome2013/article/details/81322141