请用栈实现一个队列,支持如下四种操作:

push(x) – 将元素x插到队尾;
pop() – 将队首的元素弹出,并返回该元素;
peek() – 返回队首元素;
empty() – 返回队列是否为空;

注意:

你只能使用栈的标准操作:push to top,peek/pop from top, size 和 is empty;
如果你选择的编程语言没有栈的标准库,你可以使用list或者deque等模拟栈的操作;
输入数据保证合法,例如,在队列为空时,不会进行pop或者peek等操作;

样例
MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek(); // returns 1
queue.pop(); // returns 1
queue.empty(); // returns false

栈的特点是先进后出(LIFO),而队列的特点是先进先出(FIFO),设置两个栈并对它们进行合理的操作可以模拟出一个队列。

pop函数和peek函数唯一的区别在于是否需要弹出队首元素。

class MyQueue {public:/** Initialize your data structure here. */stack<int> stk1,stk2;MyQueue() {}/** Push element x to the back of queue. */void push(int x) {stk1.push(x);}/** Removes the element from in front of queue and returns that element. */int pop() {while(stk1.size()>1)//先将除了第一个入stk1栈的所有元素暂时存入stk2栈{stk2.push(stk1.top());stk1.pop();}int t_leader=stk1.top();//最先入stk1栈的元素stk1.pop();//弹出while(stk2.size()) //将其余元素回归stk1栈{stk1.push(stk2.top());stk2.pop();}return t_leader;//返回队首}/** Get the front element. */int peek() {while(stk1.size()>1){stk2.push(stk1.top());stk1.pop();}int t_leader=stk1.top();while(stk2.size()) {stk1.push(stk2.top());stk2.pop();}return t_leader;}/** Returns whether the queue is empty. */bool empty() {return stk1.empty();}
};/*** Your MyQueue object will be instantiated and called as such:* MyQueue obj = MyQueue();* obj.push(x);* int param_2 = obj.pop();* int param_3 = obj.peek();* bool param_4 = obj.empty();*/

剑指Offer 09.用两个栈实现队列(LIFO与FIFO)相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  2. java 栈和队列实现迷宫代码_LeetCode每日一题--剑指 Offer 09. 用两个栈实现队列(Java)

    DailyChallenge 剑指 Offer 09. 用两个栈实现队列 Easy20200630 Description 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTai ...

  3. 【LeetCode】剑指 Offer 09. 用两个栈实现队列

    [LeetCode]剑指 Offer 09. 用两个栈实现队列 文章目录 [LeetCode]剑指 Offer 09. 用两个栈实现队列 一.双栈 总结 一.双栈 维护两个栈,第一个栈支持插入操作,第 ...

  4. Leetcode 剑指 Offer 09. 用两个栈实现队列 (每日一题 20210915)

    用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...

  5. 【双100%提交】剑指 Offer 09. 用两个栈实现队列

    立志用最少的代码做最高效的表达 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队 ...

  6. 剑指 Offer 09. 用两个栈实现队列(相邻相同操作只需要移动一次)

    题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,delete ...

  7. 剑指offer 09.用两个栈实现队列

    用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...

  8. 剑指 Offer 09. 用两个栈实现队列

    import java.util.Stack;class CQueue {// 模拟队列入private Stack<Integer> stack1;// 模拟队列出private Sta ...

  9. 【剑指offer】 用两个栈实现队列 java实现

    [剑指offer] 用两个栈实现队列 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈和队列的性质,栈是先进后出的,而队列是先进先出的.对于栈我 ...

  10. 剑指Offer #05 用两个栈实现队列(模拟)

    题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...

最新文章

  1. 日常记录-Pandas Cookbook
  2. android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
  3. shell只允许某些ipssh登录,配合iptables最好
  4. 启明云端分享 | 小明带你用一组图查看ESP32-S3 \ESP32-S2\ ESP32的区别
  5. php单机session消失_Session 失效的原因汇总及解决丢失办法
  6. PLSQL developer 连接64位oracle 11.2G
  7. SDN第5次上机作业
  8. 计算机编程语言的分类,解释型语言、编译型语言、脚本语言的关系
  9. 多个折线样式_Python数据可视化实例:关于图表“贵族”折线的增强优化方法
  10. 魔板游戏java_Java魔板游戏完整代码及注释
  11. idea启动azkaban2.5
  12. Matlab 查阅、读取nc数据
  13. Idea21.1.3版本中Scala默认设置带类型
  14. B-spline曲线基函数计算Matlab程序
  15. AcWing-C/C++语法基础【合集2】
  16. 智能社JS学习笔记(二)
  17. 关于单点接地和多点接地的问题
  18. React+D3组件开发之treemap(树图)
  19. 情感驿站 | 什么叫跟对人,才能做对事?
  20. JavaScript 脚本

热门文章

  1. 全球及中国DIN筒夹行业运营前景与投资决策建议报告2022版
  2. ​最强全集,数据科学领域,那些你不能不知道的大咖们!
  3. jquery File upload 的一个例子
  4. 虚拟机建Mac系统步骤
  5. java——傻瓜电梯
  6. DNA非编码区突变,DNA外显子突变,DNA内含子突变的区别,什么是DNA突变,什么是基因突变
  7. 2019依图科技笔试题
  8. 大数据的核心架构层是哪些?
  9. Jzoj5603 xiz
  10. 集成电路 Trimming