提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
我们都知道栈和队列都是非常基础的数据结构,但对其底层原理实现却很少关注。通过用栈来实现队列,来体现其底层的原理。
一、栈是什么?
栈是一个先入后出的有序列表;
特点是可以限制线性表中元素的插入和删除 只能在线性表的同一端 进行;
允许插入和删除的一端,为变化的一端,称为栈顶( Top),另一端为固定的一端,称为栈底( Bottom);
二、队列是什么?
队列是一个先入先出的有序列表;
其队头随着输出的改变而改变,队尾则随着输入的改变而改变;
三、用栈来实现队列
思路:
用栈来实现队列需要两个栈:一个输入栈,一个输出栈;
在进栈的时候直接输入即可,但出栈的时候需要先把输入栈的数据全部输入到输出栈中,此时输出栈的栈顶即输入栈的栈底;
代码如下:
class MyQueue { Stack<Integer> stackIn; Stack<Integer> stackOut; public MyQueue() { stackIn = new Stack<>(); stackOut = new Stack<>(); } public void push(int x) { stackIn.push(x); } public int pop() { zhuan(); return stackOut.pop(); } private void zhuan(){ if (!stackOut.isEmpty()){ return; } while (!stackIn.isEmpty()){ stackOut.push(stackIn.pop()); } } public int peek() { zhuan(); return stackOut.peek(); } public boolean empty() { return stackIn.isEmpty()&&stackOut.isEmpty(); }