栈与队列练习题
Posted TGB-Earnest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了栈与队列练习题相关的知识,希望对你有一定的参考价值。
前言
我们之前说了队列和栈的特点以及其他知识,今天我们来做一下相关的练习
练习题
队列
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
解析
这个题的重点是如何将先进先出改变成先进后出,只要把这个解决了,也就出来了。
我们可以用两个队列,进行来回的交替。
//先放在辅助队列中
queue2.offer(x);
while (!queue1.isEmpty())
queue2.offer(queue1.poll());
Queue<Integer> queueTemp;
queueTemp = queue1;
queue1=queue2;
queue2=queueTemp;// 最后交换queue1和queue2,将元素都放到queue1中
从这段代码中,我们可以看出来,辅助队列queue2,用来存储最新的值,然后将queue1中的值进行弹出道queue2中,queue1弹出完之后为空,然后赋值给临时队列,将queue2给1,最后将2也为空。
整体代码为:
public class MyStack
Queue<Integer> queue1; //和栈中保持一样
Queue<Integer> queue2; //辅助队列
public MyStack()
queue1 = new LinkedList<>();
queue2 = new LinkedList<>();
public void push(int x)
//先放在辅助队列中
queue2.offer(x);
while (!queue1.isEmpty())
queue2.offer(queue1.poll());
Queue<Integer> queueTemp;
queueTemp = queue1;
queue1=queue2;
queue2=queueTemp;// 最后交换queue1和queue2,将元素都放到queue1中
public int pop()
// 因为queue1中的元素和栈中的保持一致,所以这个和下面两个的操作只看queue1即可
return queue1.poll();
public int top()
return queue1.peek();
public boolean empty()
return queue1.isEmpty();
public static void main(String[] args)
MyStack myQueue = new MyStack();
for (int i = 0; i < 10; i++)
myQueue.push(i);
myQueue.pop();
链接:https://leetcode.cn/problems/implement-stack-using-queues
栈
用两个栈实现一个队列,来说是比较容易的,因为只需把第一个栈的元素弹出到另一个栈中,这样再弹出的顺序从整体来看又变成了先进先出了。
public class MyQueue
private Stack<Integer> input;
private Stack<Integer> output;
public MyQueue()
input = new Stack<>();
output = new Stack<>();
public void push(int x)
input.push(x);
public int pop()
//如果b栈为空,则将input栈全部弹出并压入b栈中,然后b.pop()
if (output.isEmpty())
while (!input.isEmpty())
output.push(input.pop());
return output.pop();
public int peek()
if (output.isEmpty())
while (!input.isEmpty())
output.push(input.pop());
return output.peek();
public boolean empty()
return input.isEmpty() && output.isEmpty();
public static void main(String[] args)
MyQueue myQueue = new MyQueue();
myQueue.push(1);
myQueue.push(2);
myQueue.push(3);
myQueue.pop();
我们会持续更新这方面题
以上是关于栈与队列练习题的主要内容,如果未能解决你的问题,请参考以下文章