题目

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):

实现 MyQueue 类:

void push(int x) 将元素 x 推到队列的末尾
int pop() 从队列的开头移除并返回元素
int peek() 返回队列开头的元素
boolean empty() 如果队列为空,返回 true ;否则,返回 false
说明:
你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
进阶:
你能否实现每个操作均摊时间复杂度为 O(1) 的队列?换句话说,执行 n 个操作的总时间复杂度为 O(n) ,即使其中一个操作可能花费较长时间。

参考别人思路,使用双栈思想

push数据:把数据放进输入栈

pop数据:

输出栈如果为空,就把输入栈数据全部导入,再从输出栈弹出数据

如果输出栈不为空,则直接从输出栈弹出数据就可以了。

如何判断队列为空:如果输入栈和输出栈都为空,则说明模拟的队列为空。

代码

class MyQueue {public:stack<int> stIn;stack<int> stOut;/** Initialize your data structure here. */MyQueue() {}/** Push element x to the back of queue. */void push(int x) {stIn.push(x);}/** Removes the element from in front of queue and returns that element. */int pop() {//如果输出栈为空if(stOut.empty()){//就把数据全部导入while(!stIn.empty()){stOut.push(stIn.top());stIn.pop();}}//从输出栈弹出数据int result =stOut.top();stOut.pop();return result;}/** Get the front element. */int peek() {//直接使用已有pop函数int res = this->pop();//因为pop()函数弹出了元素res,所以还得再添加回去stOut.push(res);return res;}/** Returns whether the queue is empty. */bool empty() {return stIn.empty() && stOut.empty();}
};/*** Your MyQueue object will be instantiated and called as such:* MyQueue* obj = new MyQueue();* obj->push(x);* int param_2 = obj->pop();* int param_3 = obj->peek();* bool param_4 = obj->empty();*/

leetcode 232. 用栈实现队列 思考分析相关推荐

  1. LeetCode 232. 用栈实现队列(双栈法-队列)

    1. 题目 使用栈实现队列的下列操作: push(x) – 将一个元素放入队列的尾部. pop() – 从队列首部移除元素. peek() – 返回队列首部的元素. empty() – 返回队列是否为 ...

  2. leetcode 232. 用栈实现队列(Implement Queue using Stacks)

    目录 题目描述: 示例: 说明: 解法: 题目描述: 使用栈实现队列的下列操作: push(x) -- 将一个元素放入队列的尾部. pop() -- 从队列首部移除元素. peek() -- 返回队列 ...

  3. 【Java】LeetCode 232. 用栈实现队列

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

  4. Leetcode 232. 用栈实现队列 解题思路及C++实现

    解题思路: 使用两个栈,一个栈a用来存储每一次操作得到的队列,另一个栈b作为辅助栈. 在每一次push操作的时候,先把a中排好的队列(先进先出),依次push进栈b,所以,栈b中元素的排序就是后进先出 ...

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

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

  6. 【Leetcode】232.用栈实现队列

    题目链接:232.用栈实现队列 关键字:栈.队列 解题思路 使用两个栈实现队列,其中一个栈正常使用,另一个栈用来保存逆序数据 代码实现 class MyQueue { public:/** Initi ...

  7. Leetcode刷题——栈与队列

    Leetcode刷题--栈与队列 一.栈与队列定义 二.Leetcode题目 1.用栈实现队列 2.用队列实现栈 一.栈与队列定义 栈:先进后出,栈提供push 和 pop 等等接口,所有元素必须符合 ...

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

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

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

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

最新文章

  1. Centos7安装Nginx+PHP
  2. 戛古 Kakku, Kekku-掸邦 shan state
  3. SpringBoot+Swagger2实现可视化API文档流程
  4. 星际战甲堕落轰击者结合目标_星际战甲-任务指南
  5. hplaserjet1022老提示打印错误,hp laserjet 1022 在win7上正确的安装步骤
  6. 分布式与人工智能课程(part6)--第六课
  7. apache camel 相关配置_Apache Camel的Java编程入门指南
  8. linux的定制和发布(二)
  9. excel固定一行不滚动怎么取消
  10. 转载:深圳入户和房价相关
  11. 演讲的思路锻炼,逆向思维需要刻意练习吗?
  12. codeforces949D Curfew
  13. inventor如何画心_Illustrator | 如何画一个心型图案
  14. 互联网电商平台运营模式
  15. 如何设置等高线坐标系并输出
  16. 嵌入式计算机示例及应用
  17. 安卓刷java系统_xp系统下面(android)安卓手机刷机ROM教程
  18. wordpress php 采集器,wordpress 采集插件怎么用
  19. 软考云题库Web版题库V1.1更新功能
  20. 编程题目分类(剪辑)

热门文章

  1. 阿里90后工程师,如何用AI程序写出双11打call歌?
  2. JS相关知识总结(一)
  3. java之Hibenate中监听事件的重写和二级cache缓存
  4. numpy 辨异(三)—— hstack/column_stack,linalg.eig/linalg.eigh
  5. Allegro padstack
  6. Android System分区大小异常
  7. 如何利用C#编写网页投票器程序 如何使用代理来投票 代理IP来投票
  8. 2013.8.7Java语言基础——数组
  9. HttpService远程校验
  10. 中大计算机考研复试刷人太狠,中山大学考研复试被刷原因大盘点!