题目地址:
难度:简单
今天刷用队列实现栈,大家有兴趣可以点上看看题目要求,试着做一下。
题目:
我们直接看题解吧:
解题方法:
方法1、利用双队列
方法2、利用单队列
审题目+事例+提示:
解题分析:
单队列主要是元素先出队然后在入队,实现前后顺序的调转
双队列主要是把主队元素出队放到辅助对,然后辅助队在入队主队列
解题思路:
单队列:
1、入栈操作时,首先获得入栈前的元素个数 n,然后将元素入队到队列,再将队列中的前 n-1个元素(即除了最后一个后入队的元素之外的全部元素)依次出队并入队到队列尾部,此时队列的前端的元素即为后入队的元素,且队列的前端和后端分别对应栈顶和栈底。
2、出栈操作只需要移除队列的前端元素并返回即可,获得栈顶元素操作只需要获得队列的前端元素并返回即可(不移除元素)。
3、由于队列用于存储栈内的元素,判断栈是否为空时,只需要判断队列是否为空即可。
代码实现:
class MyStack {
Queue<Integer> queue;
public MyStack() {
queue = new LinkedList<Integer>();//创建队列对象
}
/** Push element x onto stack. */
public void push(int x) {
int n = queue.size();
queue.offer(x); //
for (int i = 0; i < n; i++) { //前n-1元素出队,接着再次入队
queue.offer(queue.poll());
}
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return queue.poll(); //出队操作
}
/** Get the top element. */
public int top() {
return queue.peek(); //返回栈顶元素
}
/** Returns whether the stack is empty. */
public boolean empty() {
return queue.isEmpty(); //判断是否为空
}
}