思路:

想到之前用栈模拟队列的题目(232题)用了两个栈,一个主栈,一个辅助栈,这个题目里直接提示用两个队列,想必第二个队列的功能应该也是类似于辅助的功能。(联想)

这样就可以先写出empty()的代码,类似232,只有都空才是真空,所以可以先写出来这个函数的答案;

如果选q1作为主队列,那么push的时候就push到q1里去,push()写好了;

 主要是pop的思路:举push 1,2,3再pop()的例子。如果是栈,现在pop的应该是3,但是队列没有这种操作,所以就要用到辅助队列q2了。那么目标元素是3,它被包含在q1中,所以pop要模拟的功能就是:在正确保存其他元素的相对顺序的同时把3从q1中移除。所以,采取的操作就是把3之前的所有元素都移动到另一个队列中,只留下3,这个时候再移除3并返回即可。

这也是这道题和232的不同之处,在这样操作之后,q1和q2的主次顺序变化了,并且q1现在是空队列。不难想到,如果再进行类似的操作,那么它们的顺序就又会变回来,所以这道题的两个队列是不断变化的。正因如此,在进行top()的时候就要注意队列为空的情况,在上面,我们让push操作永远由q1执行,这意味着q1的元素永远都是最“新鲜”的,如果q1里有元素,那么它一定是新push进来的,top直接返回q1最后一个元素即可,如果q1是空的,说明刚进行了转移操作,这个时候就返回q2最后的元素。

代码如下:

class MyStack {
public:queue<int> q1,q2;MyStack() {}void push(int x) {q1.push(x);}int pop() {if(q2.empty()){while(q1.size() != 1){int x = q1.front();q1.pop();q2.push(x);}int x = q1.front();q1.pop();return x;     }else{while(q2.size() != 1){int x = q2.front();q2.pop();q1.push(x);}int x = q2.front();q2.pop();return x;    }}int top() {return q1.empty()? q2.back() : q1.back();}bool empty() {return q1.empty() && q2.empty();}
};/*** Your MyStack object will be instantiated and called as such:* MyStack* obj = new MyStack();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->top();* bool param_4 = obj->empty();*/

优化思路:

只使用一个队列也是可以的,这时别的函数就都很简单,只需要注意pop()怎么写就行了。因为pop()最根本的东西没有变,还是想办法把back()的元素抛出队,而此时没有备用队列,所以就需要把back()变成front(),同时不能丢失队列里的其它元素——可以想象一个动画,元素不断地向前移动,直到队尾变队首:是不是很熟悉?是的,这里可以借鉴数据结构循环队列的思想,不断进行循环,让队头元素先出队再入队,这样就可以慢慢向前移动了,直到目标元素成为队头,这时就会了!

代码如下:

class MyStack {
public:queue<int> q;MyStack() {}void push(int x) {q.push(x);}int pop() {int x = q.back();while(q.front() != x){int temp = q.front();q.pop();q.push(temp);}q.pop();return x;}int top() {return q.back();}bool empty() {return q.empty();}
};/*** Your MyStack object will be instantiated and called as such:* MyStack* obj = new MyStack();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->top();* bool param_4 = obj->empty();*/

力扣225-用队列实现栈(C++,附思路及优化思路,代码)相关推荐

  1. 力扣225. 用队列实现栈(JavaScript)

    用到的函数: push()在数组末尾添加元素 shift()删除数组第一个元素 实现先进后出的原理:this.q.push(this.q.shift()) //创建1个队列 var MyStack = ...

  2. 算法训练Day11 | LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    目录 LeetCode232.用栈实现队列 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode225. 用队列实现栈 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 ...

  3. 代码随想录算法训练Day11 LeetCode232. 用栈实现队列(模拟);225.用队列实现栈(模拟);20. 有效的括号(栈应用);1047. 删除字符串中的所有相邻重复项(栈应用)

    代码随想录算法训练Day11 | LeetCode232. 用栈实现队列(模拟):225.用队列实现栈(模拟):20. 有效的括号(栈应用):1047. 删除字符串中的所有相邻重复项(栈应用) 关于栈 ...

  4. Suzy找到实习了吗Day 10 | 栈和队列开始啦:232. 用栈实现队列,225. 用队列实现栈

    day10 python栈的实现 Python栈所需要的包 232. 用栈实现队列 思路 solution ?? 225. 用队列实现栈 思路 solution python栈的实现 Python中现 ...

  5. LeetCode Algorithm 225. 用队列实现栈

    225. 用队列实现栈 Ideas 队列和栈的相互操作,需要特别理解栈和队列这两种数据结构的相同点和不同点. 栈:先进后出,队列:先进先出. 既然数据结构已经限定元素进出的顺序,那么单纯的用一个队列肯 ...

  6. 力扣刷题记录-单调栈相关题目

    单调栈是指栈里的元素保持升序或者降序. 判别是否需要使用单调栈:通常是一维数组里面,需要寻找一个元素左边或者右边第一个比自己大或者小的元素的位置,则可以考虑使用单调栈:这样的时间复杂度一般为O(n). ...

  7. 【代码随想录刷题记录】 232.用栈实现队列 、225. 用队列实现栈

    232.用栈实现队列 题目 请你仅使用两个栈实现先入先出队列.队列应当支持一般队列支持的所有操作(push.pop.peek.empty): 实现 MyQueue 类: void push(int x ...

  8. 代码随想录【day 10 栈与队列】| 232.用栈实现队列、 225. 用队列实现栈

    代码随想录[day 10 栈与队列]| 232.用栈实现队列. 225. 用队列实现栈 理论基础 LeetCode 232.用栈实现队列 题目链接:232.用栈实现队列 卡哥文解 视频讲解 解题思路( ...

  9. 代码随想录第十天 | 225. 用队列实现栈 232.用栈实现队列(Java))

    232.用栈实现队列 class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue( ...

  10. 零尽其用,尾随不落——探究力扣题目“移除字符串中的尾随零”的解题思路

    本篇博客会讲解力扣"2710. 移除字符串中的尾随零"的解题思路,这是题目链接. 先来审题: 以下是示例: 以下是提示: 本题的思路是: 先遍历字符串,找到字符串末尾的\0. 从\ ...

最新文章

  1. 数说真相|46公里内,Uber更划算
  2. python中引用上层路径
  3. jni c向java传递数组_通过jni将jint数组从c返回到java
  4. SVG.use/拖拽
  5. 如何在 Github 工作流文件里引用自定义实现的 action
  6. 【渝粤教育】广东开放大学 海外社交媒体营销 形成性考核 (45)
  7. linux 监听日志_Linux系统取证概述
  8. Vue-Less的自动和手动引入
  9. Linux下数学(科学)软件简介(一)
  10. IDEA external library 这个里面是空的怎么办
  11. 饥荒steam联机版服务器无响应,《饥荒:联机版》服务器卡顿原因分析及解决教程...
  12. 无线传感器网络中低功耗MAC协议—T-MAC
  13. SPSS——统计描述
  14. html表格怎么加图片,添加图片到HTML表格动态
  15. 【内存】进程结束后程序员没有释放的内存哪儿去了?
  16. 使命召唤 高级战争 闪退_使命召唤:现代战争进入第5季
  17. 怎样用sc命令运行服务器,windows中的sc控制服务命令
  18. 游戏开发中的专业术语
  19. 鸟哥的服务器《十三》Web服务器
  20. Process ID 59:0 owns resources that are blocking processes on Scheduler 2

热门文章

  1. Java有哪些常用的转换类,JavaSE——常用类、类型转换
  2. Vins中的FeatureTracker::readImage(const cv::Mat _img, double _cur_time)函数
  3. 静态资源详解和帮助文档的使用
  4. 零基础入门Python3-列表list详解
  5. Apache的详细配置
  6. 微信第三方平台定时接收component_verify_ticket
  7. OneNote 2013 快捷键
  8. Spark源码走读10——Spark On Yarn
  9. 服务器biosraid管理
  10. EasyUI---layout布局、树形组件、选项卡tabs