欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 栈和队列-队列的练习题

栈和队列-队列的练习题

2025/2/25 13:15:28 来源:https://blog.csdn.net/2201_75880772/article/details/143361379  浏览:    关键词:栈和队列-队列的练习题

1.  用队列实现栈

题目解析:

 题目链接:. - 力扣(LeetCode)

我们需要俩个队列来实现栈的入栈和出栈操作;

首先我们创建俩个队列qu1和qu2并且我们生成相应的构造方法;

解题步骤:

1. 哪个队列不为空,我就把元素放到哪个队列里面去(如果俩个都是空的,那就指定放到第一个里面去)

2. 出栈的时候,哪个不为空,我们就往这个队列放size - 1个元素

3. 当俩个队列都为空的时候,我们模拟的栈就是空的

及具体代码:

class MyStack {//先生成俩个队列private Queue<Integer> qu1;public Queue<Integer> qu2;public MyStack() {qu1 = new LinkedList<>();qu2 = new LinkedList<>();}public void push(int x) {if(!qu1.isEmpty()) {qu1.offer(x);}else if(!qu2.isEmpty()) {qu2.offer(x);}else {//俩个队列都是空的 指定存放到第一个队列当中qu1.offer(x);}}public int pop()  {if(empty()) {return -1;}if(!qu1.isEmpty()) {int size = qu1.size();for (int i = 0; i < size - 1; i++) {//qu1.size()是一个变量,每次循环一次它都会变化//从队列1把元素取出来int x = qu1.poll();//放到que2里面去qu2.offer(x);}//返回qu1里面剩下的元素return qu1.poll();}else {int size = qu2.size();for (int i = 0; i < size - 1; i++) {//从队列2把元素取出来int x = qu2.poll();//放到que1里面去qu2.offer(x);}//返回qu2里面剩下的元素return qu2.poll();}}
//TODO 获取栈顶元素public int top() {if(empty()) {return -1;}if(!qu1.isEmpty()) {int size = qu1.size();int x = -1;for (int i = 0; i < size; i++) {//qu1.size()是一个变量,每次循环一次它都会变化//从队列1把元素取出来x = qu1.poll();//放到que2里面去qu2.offer(x);}//返回qu1里面最后一个元素return x;}else {int size = qu2.size();int x = -1;for (int i = 0; i < size; i++) {//从队列2把元素取出来x = qu2.poll();//放到que1里面去qu2.offer(x);}//返回qu2里面剩下的元素return x;}}public boolean empty() {//俩个队列同时为空的时候 说明模拟实现的栈是空的return qu2.isEmpty() && qu1.isEmpty();}
}

2.  用栈实现队列

题目解析:

 题目链接:. - 力扣(LeetCode)

我们需要俩个栈来实现队列的入队和出队操作;

首先我们先创建俩个栈:s1,s2,并且创建一个构造方法,生成俩个栈

解题的话分别分为以下俩个步骤:

1. 入队的时候,全部放在第一个栈里面

也就是s1.push(要放入的元素)

2. 出队的时候 我们在第二个栈里面出队,当第二个栈里面没有元素的时候,把第一个栈里面的元素全部放进来

其他方法介绍:

判断队空 empty()

        我们只有当s1和s2没有元素的时候才是队空.

观察队头元素

        我们直接在pop的基础上返回s2的栈顶元素即可

具体代码:

class MyQueue {//设置俩个栈//1. 入队的时候放在第一个栈里面//2. 出队的时候放在第二个栈里面,当第二个栈里面没有元素的时候.把第一个栈里面的元素全部移过来private Stack<Integer> s1;private Stack<Integer> s2;public MyQueue() {s1 = new Stack<>();s2 = new Stack<>();}public void push(int x) {//我们先把元素都放在第一个栈里面s1.push(x);}public int pop() {if(empty()) {return -1;}//如果不为空,我们先把s1所有的元素放到s2中去if (s2.empty()) {while (!s1.empty()){int tmp = s1.pop();s2.push(tmp);}}//然后我们就返回s2的栈顶元素return s2.pop();}public int peek() {if(empty()) {return -1;}//如果不为空,我们先把s1所有的元素放到s2中去if (s2.empty()) {while (!s1.empty()){int tmp = s1.pop();s2.push(tmp);}}//然后我们就返回s2的栈顶元素return s2.peek();}
//俩个栈同时为空才是队空public boolean empty() {return s1.empty() && s2.empty();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词