1.队列的功能是FIFO(先进后出)原则,添加元素是在队尾添加,删除元素是在队头删除,栈是一种先进先出(FIFO)的数据结构,栈和队列都可以存储数据,底层采用数组或者链表。
2.栈模拟队列的原理
栈模拟队列需要定义两个栈,in栈为入队栈,out栈为出队栈。入队操作:首先判断out栈是否为空,如果不为空,则将out栈的元素依次pop弹出再push添加至in栈,然后将需要添加的push到in栈完成入队操作;出队操作:首先判断in栈是否为空,如果不为空,则将in栈的元素依次pop弹出再push添加至out栈,然后依次pop完成出队操作。遍历:首先判断队列是否为空(需要判断in栈和out栈),如果为空再依次pop出队并输出
3.参考实现代码
import java.util.Stack;
public class demo06 {
public static void main(String[] args) {
Myqueue<String> queue = new Myqueue<String>();
queue.offer("A1");
queue.offer("A2");
queue.offer("A3");
queue.offer("A4");
System.out.println(queue.poll()+"出队");
queue.offer("A5");
//遍历队列
while(!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}
//栈模拟队列
class Myqueue<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();
}
}
如有不当之处还请大家多多指正留下评论,一起学习!