剑指Offer 09.用两个栈实现队列(LIFO与FIFO)
请用栈实现一个队列,支持如下四种操作:
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)相关推荐
- 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java
<LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...
- java 栈和队列实现迷宫代码_LeetCode每日一题--剑指 Offer 09. 用两个栈实现队列(Java)
DailyChallenge 剑指 Offer 09. 用两个栈实现队列 Easy20200630 Description 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTai ...
- 【LeetCode】剑指 Offer 09. 用两个栈实现队列
[LeetCode]剑指 Offer 09. 用两个栈实现队列 文章目录 [LeetCode]剑指 Offer 09. 用两个栈实现队列 一.双栈 总结 一.双栈 维护两个栈,第一个栈支持插入操作,第 ...
- Leetcode 剑指 Offer 09. 用两个栈实现队列 (每日一题 20210915)
用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...
- 【双100%提交】剑指 Offer 09. 用两个栈实现队列
立志用最少的代码做最高效的表达 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队 ...
- 剑指 Offer 09. 用两个栈实现队列(相邻相同操作只需要移动一次)
题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,delete ...
- 剑指offer 09.用两个栈实现队列
用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,deleteHea ...
- 剑指 Offer 09. 用两个栈实现队列
import java.util.Stack;class CQueue {// 模拟队列入private Stack<Integer> stack1;// 模拟队列出private Sta ...
- 【剑指offer】 用两个栈实现队列 java实现
[剑指offer] 用两个栈实现队列 题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈和队列的性质,栈是先进后出的,而队列是先进先出的.对于栈我 ...
- 剑指Offer #05 用两个栈实现队列(模拟)
题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...
最新文章
- 日常记录-Pandas Cookbook
- android运用 sqlite 实现简单的通讯录_大一新生作品:利用 C 语言实现quot;通讯录管理系统quot;,直言太简单...
- shell只允许某些ipssh登录,配合iptables最好
- 启明云端分享 | 小明带你用一组图查看ESP32-S3 \ESP32-S2\ ESP32的区别
- php单机session消失_Session 失效的原因汇总及解决丢失办法
- PLSQL developer 连接64位oracle 11.2G
- SDN第5次上机作业
- 计算机编程语言的分类,解释型语言、编译型语言、脚本语言的关系
- 多个折线样式_Python数据可视化实例:关于图表“贵族”折线的增强优化方法
- 魔板游戏java_Java魔板游戏完整代码及注释
- idea启动azkaban2.5
- Matlab 查阅、读取nc数据
- Idea21.1.3版本中Scala默认设置带类型
- B-spline曲线基函数计算Matlab程序
- AcWing-C/C++语法基础【合集2】
- 智能社JS学习笔记(二)
- 关于单点接地和多点接地的问题
- React+D3组件开发之treemap(树图)
- 情感驿站 | 什么叫跟对人,才能做对事?
- JavaScript 脚本