《剑指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 热度 ...
随机推荐
- 深入理解jQuery中的each方法
写在前面 我们先回顾一下数组中的forEach方法吧.在数组的实例上有个forEach方法供所有实例使用,forEach里面接收一个回调函数,而且回调函数默认接收三个参数:当前项,索引,数组 .for ...
- Kafka架构简介
一.kafka的架构 1.Broker kafka集群包含一个或者多个服务器,这种服务器就叫做Broker 2.Topic 每条发布到kafka集群的消息都有一个类别,这个类别就叫做Topic(逻辑上 ...
- vue-CLI踩坑记
vue init webpack vue-demo 使用 windows 7 DOS命令行和gitbash都有选择和实际选择结果不一致的问题, DOS命令行只在 Vue build有问题, gitba ...
- 【blog】好用的markdown插件 - Mditor
效果 官网地址 GitHub: https://github.com/houfeng/mditor 主页: http://houfeng.net/mditor/
- 【父元素parent】【子元素children】【同胞siblings】【过滤】
1.父元素 $("span").parent() //定位到span的父元素 $("span").parents() // ...
- Network Architecture Search Survey
- OVS-----CentOS7.2上安装OVS软件
1.安装依赖包: yum -y install make gcc openssl-devel autoconf automake rpm-build redhat-rpm-config yum -y ...
- hibernate 嵌套事务
hibernate 嵌套事务,多线程调试.问题麻烦啊,后续有时间补全.
- SpringCloud Netflix Ribbon(负载均衡)
⒈Ribbon是什么? Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡工具. Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负 ...
- 【leetcode】557. Reverse Words in a String III
Algorithm [leetcode]557. Reverse Words in a String III https://leetcode.com/problems/reverse-words-i ...