队列特点:FIFO(先进先出)
栈特点:LIFO(后进先出)
实现队列需要两个栈来存储数据
由于栈只能在栈顶进行操作所以需要两个栈来进行队列的先进先出操作先将数据存到入队栈(in)此时最早存的在栈底如果要进行出队操作需要将入栈队的数据先存放到出栈队(out)此时出栈队中栈顶元素就成为了最先进入队列的数据此时队出栈队(out)进行出栈。两个栈进行配合就可以完成队列FIFO的操作。
代码实现
package com.liubatian;
import java.util.Stack;
public class Demo01 {
public static void main(String[] args) {
MyQuene<String> queue = new MyQuene<String>();
queue.offer("a1");
queue.offer("a2");
queue.offer("a3");
queue.offer("a4");
queue.offer("a5");
System.out.println(queue.poll() + "出队");
queue.offer("a5");// 入队新元素
// 遍历新队列??
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}
//栈模拟队列
class MyQuene<E> {
private Stack<E> in = new Stack<E>();// 入队栈
private Stack<E> out = new Stack<E>();// 出队栈
// 判断队列是否为空
public boolean isEmpty() {
return in.size() == 0 && out.size() == 0;
}
// 入队
public void offer(E e) {
while (!out.isEmpty()) {
in.push(out.pop());
}
in.push(e);
}
// 出队
public E poll() {
while (!in.isEmpty()) {
out.push(in.pop());
}
return out.pop();
}
}