《剑指offer》用两个栈实现队列
本题来自《剑指offer》 用两个栈实现队列
题目:
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
思路:
队列定义:先进先出
栈定义:先进后出
要实现入队操作:直接在栈1中入栈,将元素压入到栈1中。
要实现出队操作:
如果栈2中没有元素则将栈1的全部数据压入栈2;
如果栈2中有元素,则直接返回栈顶元素即可。
C++ Code:
class Solution
{
public:
void push(int node) {
stack1.push(node); //入队是直接压入栈1中
} int pop() {
if (stack2.size()<=){ //如果栈2中没有值
while(stack1.size()>){ //则将栈1的值全部压入栈2中
int val = stack1.top();
stack1.pop();
stack2.push(val);
}
}
int head = stack2.top(); //取栈2的栈顶,即为出队
stack2.pop(); //栈2顶出栈
return head;
} private:
stack<int> stack1;
stack<int> stack2;
};
Python Code:
class MyQueue(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.stack1 =[] #第一个栈进行队列的输入操作
self.stack2 = [] #第二个栈进行队列的出栈和查看操作
def push(self, x):
"""
Push element x to the back of queue.
:type x: int
:rtype: None
"""
self.stack1.append(x) #进行入队操作,将元素先在第一个栈中缓存
def pop(self):
"""
Removes the element from in front of queue and returns that element.
:rtype: int
"""
if not self.stack2: #如果第二个栈是空的
while self.stack1: #循环遍历第一个栈
self.stack2.append(self.stack1.pop())#将第一个栈中的元素全部加入到第二个栈中
return self.stack2.pop() #出栈最后一个元素
def peek(self):
"""
Get the front element.
:rtype: int
"""
if not self.stack2: #如果第二个栈是空的
while self.stack1: #将第一个占中的所有元素全部加载到第二个栈中
self.stack2.append(self.stack1.pop())
return self.stack2[-1] #返回最后一个元素的值
def empty(self):
"""
Returns whether the queue is empty.
:rtype: bool
"""
if not self.stack1 and not self.stack2:#只有当两个栈同时(and)空时候,队列为空
return True
else:
return False #否则队列中还有值
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
思考:
我思故我在。
《剑指offer》用两个栈实现队列的更多相关文章
- 剑指Offer 用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进 ...
- 【剑指offer】两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. public class Solution { Stack<Integer> stack ...
- [剑指Offer]9-用两个栈实现队列
题目链接 https://www.nowcoder.com/practice/54275ddae22f475981afa2244dd448c6?tpId=13&tqId=11158&t ...
- 《剑指offer》---两个栈实现队列
本文算法使用python3实现 1.题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 时间限制:1s:空间限制:32768K 2.思路描述: ...
- 剑指Offer——用两个栈实现队列
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 代码: class Solution { public: void push(int node ...
- 用js刷剑指offer(用两个栈实现队列)
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 牛客网链接 js代码 let stack1 = [] let stack2 = [] function ...
- 剑指offer 计划1(栈与队列)---java
1.1.题目1 剑指 Offer 09. 用两个栈实现队列 1.2.解法 解法如题目所说.定义两个栈.这里假设第一个栈为a,第二个栈为b. 实现两个函数增加尾和删除头. 增加即直接push入第一个栈. ...
- 剑指offer计划27(栈与队列困难)---java
1.1.题目1 剑指 Offer 59 - I. 滑动窗口的最大值 1.2.解法 解题思路:(来自作者bigbeats) 相当于维护一个最大队列(队头元素最大,向队尾非严格递减) 在未形成窗口前,先构 ...
- 剑指offer--5.用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: # 栈A用来作入队列# 栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列) v ...
- 剑指offer--3.用两个栈实现队列
快速刷一遍,先捏软柿子 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度 ...
随机推荐
- 服务器多站点多域名HTTPS实现
假设有这样一个场景,我们有多个站点(例如site1.marei.com,site2.marei.com和site3.marei.com)绑定到同一个IP:PORT,并区分不同的主机头.我们为每一个SS ...
- 简单重写容器vector
#pragma once #include <iostream> using namespace std; template<class T> class CMyVector ...
- mysql 查询优化 ~ explain与索引失效
一 explain 1 扫描行数根据的是表的统计元数据 2 索引的元数据具体指的就是show index from查到的索引的区分度,索引的区分度越高越好 3 表的元数据是定期收集,所以可能不 ...
- js 一个对象的属性名是一个变量怎么处理?
1.这种方法的属性(setAttrName)可以是一个变量. var obj = {}; obj[setAttrName] = 'Tom' 2.这样就可以动态的给js对象添加变量属性. var obj ...
- 使用grep排除空行和注释行
grep的排除选项为 -v排除空行的命令是:grep -v '^$' filename排除以#注释的命令是:grep -v '^#' filename 结合起来就是,既排除空行又排除注释行的命令gre ...
- 使用C++编写linux多线程程序
前言 在这个多核时代,如何充分利用每个 CPU 内核是一个绕不开的话题,从需要为成千上万的用户同时提供服务的服务端应用程序,到需要同时打开十几个页面,每个页面都有几十上百个链接的 web 浏览器应用程 ...
- struts2框架之请求参数(参考第二天学习笔记)
获取请求参数 请求参数:表单中的数据,或者是超链接中的数据. 1. 得到request,再通过request来获取.2. 属性驱动 在Action中提供与表单字段名称相同的属性即可. 而一个名为par ...
- Nikitosh 和异或 —— 一道 trie 树的题用可持久化 trie 水 然后翻车了...
题意简介 题目就是叫你找两个不重合的非空区间,使得这两个区间里的数异或后相加的和最大 (看到异或,没错就决定是你了可持久化trie!) 思路 水一波字典树,莫名觉得这题可持久化能过,于是水了一发挂了, ...
- 转-OWASP CSRFGuard使用细节
版权声明:不存在一劳永逸的技术 只存在不断学习的人.本文为博主原创文章,未经博主允许不得转载.交流联系QQ:1120121072 https://blog.csdn.net/u013474568/ar ...
- 023_nginx跨域问题
什么是跨域? 使用js获取数据时,涉及到的两个url只要协议.域名.端口有任何一个不同,都被当作是不同的域,相互访问就会有跨域问题.例如客户端的域名是www.redis.com.cn,而请求的域名是w ...