首先模拟一个队列,使用栈来定义:
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() + " ");
}
}
}
控制台如下: