剑指offer5:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
1. 题目描述
2. 思想
(1)栈的特点是先进后出,而队列的特点是先进先出;
(2)因此,入队列的情况和入栈的情况一样stack.push(),用一个栈来模拟就可以了;
(3)而出栈为出栈顶的元素,也即和输入相反(先进后出);然而出队为先进先出,因此借助第2个栈,将第一个站的元素放入第2栈中,再将第2个栈中的元素出栈,也即翻转两次实现了先进先出;
(4)第2个栈为出队列用,当栈2为空时,将栈1中的元素入栈2;当栈2不为空时,也即此时进行出队操作,直接将栈2中元素依次弹出
3. C++完整代码
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack> using namespace std; class Solution
{
public:
void push(int node) {
stack1.push(node);
} int pop() {
while (stack2.empty())
{
while (!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
int el = stack2.top();
stack2.pop();
return el;
} private:
stack<int> stack1;
stack<int> stack2;
}; int main()
{
Solution *s = new Solution();
for (int i = ; i<; i++)
{
s->push(i);
if (i >= )
{
int res = s->pop();
cout << res << ' ';
}
}
cout << endl;
system("pause");
return ;
}
参考资料
https://blog.csdn.net/howe1233/article/details/89504456
剑指offer5:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。的更多相关文章
- 剑指offer--5.用两个栈实现队列
题目:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: # 栈A用来作入队列# 栈B用来出队列,当栈B为空时,栈A全部出栈到栈B,栈B再出栈(即出队列) v ...
- 剑指Offer-5.用两个栈实现队列(C++/Java)
题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈的特点是先进后出,队列的特点则是先进先出. 题目要求我们用两个栈来实现一个队列,栈和队列都有入栈 ...
- 剑指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 ...
- 剑指offer--3.用两个栈实现队列
快速刷一遍,先捏软柿子 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度 ...
- 用js刷剑指offer(用两个栈实现队列)
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 牛客网链接 js代码 let stack1 = [] let stack2 = [] function ...
随机推荐
- SpringMVC 请求映射注解
@GetMapping: 处理get请求,传统的RequestMapping来编写应该是@RequestMapping(value = “/get/{id}”, method = RequestMet ...
- JS高级_变量提升和函数提升
先执行变量提升,后执行函数提升 function a(){} var a console.log(typeof a)//function
- Nginx之编写HTTP模块
1. 常用数据结构 1.1 ngx_str_t typedef struct { /* * 字符串的有效长度 */ size_t len; /* * 有效字符串的起始地址,该字符串通常并不以'\0'结 ...
- Python 寻找文件夹里以特定格式结尾的文件
代码: import os, re, time name = 'linuxday01' flags = True# 文件夹bi_test中的文件列表 print os.listdir('E:\\bi_ ...
- Android APP切换到后台接收不到推送消息
1. Android端进程被杀死后,目前自带的保护后台接收消息活跃机制.暂时没有什么好的机制保持任何情况下都活跃 android原生系统用home键杀进程可以起来,如果是强行停止就只能用户自己手动 ...
- mongodb 的云数据库产品 atlas 的使用
前言:最近发现 mlab 被mongodb 收购以后,不再支持新用户,推荐使用 MongoDB Atlas 第一步:注册或登陆 在MongoDB atlas首页,如果有账号,那就点击登陆.否则点击Ge ...
- bind绑定服务的生命周期
bindService(service, conn, flags); * service :意图 * conn :activity和服务的连接通道 * flags : BIND_AUTO_CREATE ...
- [Java复习] 多线程 Multithreading
Q1多线程基础 进程和线程? 进程: 1. 一段程序执行过程,动态的,相对而言程序是静态的.(与类和对象的关系类似) 2. CPU资源分配最小单元,包括CPU调度和资源管理. 3. 一个进程可以有多个 ...
- 深度学习之Seq_seq网络
知识点 """ 机器翻译: 历史: 1.逐字翻译 2.基于统计学的机器翻译 3.循环网络和编码 翻译过程: 输入 -- > encoder -->向量 --& ...
- python之scrapy的FormRequest模拟POST表单自动登陆
1.FormRequest表单实现自动登陆 # -*- coding: utf-8 -*- import scrapy import re class GithubSpider(scrapy.Spid ...