《剑指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 热度 ...
随机推荐
- Python基础5-常用模块
本节大纲 模块介绍 time &datetime模块 random os sys shutil shelve xml处理 yaml处理 configparser hashlib subproc ...
- jQuery插件整理
toastr:Jquery消息提示插件 http://codeseven.github.io/toastr cropperjs:jQuery简单且功能强大的图片剪裁插件 https://www.npm ...
- 迅为-i.MX6Q核心板_四核工业级
飞思卡尔Freescale Cortex A9 四核处理器处理器:CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 核心板工艺:十层设计,沉金工艺基本参数:内存 ...
- classpath和classpath*的区别
classpath 指的是自己项目里的编译后的class路径 classpath* 包含jar包里面的class路径
- spring aop 加在Controller层造成类初始化两遍
写一个测试项目,在配置动态数据源的时候采用的AOP切面到Controller层中,根据参数判断是否切合数据源,结果发现,每次Controller层的类都会初始化两次! 后来测试发现,把切面放到Serv ...
- xadmin后台页面定制和添加服务器监控组件
xadmin定制 项目需要添加服务器监控页面,碍于xadmin不是很好自定义页面,之前写过插件,太麻烦了,还是直接改源码 原理其实很简单,因为xadmin的处理流程和django类似,都是通过拦截UR ...
- 使用@RequestBody将请求体映射到Action方法参数中
@PostMapping("/user") public User create(@RequestBody User user){ System.out.println(user. ...
- 题解-bzoj4221 JOI2012kangaroo
Problem bzoj 题意:给定\(n\)只袋鼠,每只袋鼠有俩属性\(a,b\),若\(a_i\leq b_j\),则\(i\)是可以被\(j\)放置在袋子里的,求经过一系列放置操作后无法进行操作 ...
- NOIP提高组—— 问题求解 与 完善程序
问题求解1: 甲乙丙丁四人在考虑周末要不要外出郊游. 已知①如果周末下雨,并且乙不去,则甲一定不去:②如果乙去,则丁一定去:③如果丙去,则丁一定不去:④如果丁不去,而且甲不去,则丙一定不去.如果周末丙 ...
- 【笔记】[WIN7x64] ThinkPad E420开机不能按设置关闭触控板的问题
将win7x32重装为Win7x64后,TouchPad(以下简称TP)就不能在开机时按照在控制面板-鼠标中的设置关闭TP, 从而每次开机都必须去点开控制面板->鼠标 才能关闭TP.因为通常不用 ...