用两个栈实现队列 【微软面试100题 第五十七题】
题目要求:
某队列的声明如下:
template<typename T> class CQueue{public:CQueue() {}~CQueue() {}void appendTail(const T& node); // append a element to tailvoid deleteHead(); // remove a element from headprivate:Stack<T> m_stack1;Stack<T> m_stack2;};
用两个栈实现队列,实现appendTail()和deleteHead(),分别完成在队列尾部插入结点和在队列头部删除结点的功能。
题目分析:
压栈的时候往stack1中压,出栈的时候,如果stack2不为空则,直接出栈stack2,如果stack2空,则把stack1的所有元素依次压入stack2,然后再出栈stack2。举个例子,如下图所示:
代码实现:
#include <iostream> #include <stack>using namespace std;template<class T> class CQueue { public:CQueue() {}~CQueue() {}void appendTail(const T& node);T deleteHead(); private:stack<T> m_stack1;stack<T> m_stack2; }; template<class T> void CQueue<T>::appendTail(const T& node) {m_stack1.push(node); } template<class T> T CQueue<T>::deleteHead() {if(m_stack2.size()==0){while(m_stack1.size()){T data = m_stack1.top();m_stack1.pop();m_stack2.push(data);}}if(m_stack2.size()==0)throw new exception("queue is empty");T top = m_stack2.top();m_stack2.pop();return top;} int main(void) {CQueue<int> queue;queue.appendTail(1);queue.appendTail(2);cout << queue.deleteHead()<<endl;queue.appendTail(3);cout << queue.deleteHead()<<endl;cout << queue.deleteHead()<<endl;return 0; }
转载于:https://www.cnblogs.com/tractorman/p/4093754.html
用两个栈实现队列 【微软面试100题 第五十七题】相关推荐
- 用两个栈实现队列(剑指offer第五题)
一.题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 二.思路解析 方法一.自己的笨方法 stack1的状态 stack2的状态 如果stack1 ...
- [剑指offer]面试题7:用两个栈实现队列
面试题7:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 用两个栈模 ...
- 剑指offer:面试题09. 用两个栈实现队列
题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...
- 剑指offer_第5题_用两个栈实现队列
题目描述 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 理解 关于栈 什么是栈 栈的抽象数据类型 Python实现栈 关于队列 什么是队列 队列抽象数据类型 Pyt ...
- 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java
<LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...
- 剑指Offer #05 用两个栈实现队列(模拟)
题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...
- 【干货】容器适配器实现两个栈模拟队列
用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream ...
- 剑指offer第二版-9.用两个栈实现队列
描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...
- 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列
一.构建乘积数组: 1.题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*. ...
最新文章
- extern与头文件(*.h)的区别和联系
- objective-c 面试题
- 【MatConvnet速成】MatConvnet图像分类从模型自定义到测试
- OpenCV几何变换的实例(附完整代码)
- 简述ospf的工作原理_简述洛氏硬度计的工作原理及应用领域
- linux qt 添加动态链接库_Qt 连接MySql数据库
- python中list的意思_list在python中是什么意思
- 和谐 平等_平等还是认同?
- Java多线程(1)--基本概念:程序、进程、线程
- gitlab 将管理员权限移交给ldap账户_CDPDC中Atlas集成FreeIPA的LDAP认证
- 聚焦业务价值:分众传媒在 Serverless 上的探索和实践
- 书摘—智能主义:未来商业与社会的新生态
- Linux中,shell脚本调用java程序模板
- Spark大数据计算框架知识总结
- Google chrome浏览器保存离线网页方法
- 【转载】扫描渗透等工具介绍
- 秒杀系统设计的关键点思考
- 如何远程访问办公室电脑(过年工作不打烊),亲测有效稳定
- wifi连接状态android,判断android设备wifi连接状态
- Dell EMC VxRail,两年拿下了10亿美金
热门文章
- linux安装中文输入法sc,Linux下安装Discuz_7.2_FULL_SC_GBK
- 云商城云小店官网源码-修复30套模板支持一键对接各大系统
- MongoDB 教程四: 高级更改操作
- 使用jQuery加载js脚本
- init_cheap: VirtualAlloc pointer is null, Win32 error 487
- Ubuntu16.04开机进入单用户模式,破解root密码
- 目标检测论文阅读:Cascade R-CNN: Delving into High Quality Object Detection(CVPR2018)
- Ethercat解析(九)之过程数据
- EtherCAT1.5.2官方文档翻译-第七章
- 【AI视野·今日CV 计算机视觉论文速览 第201期】Wed, 19 May 2021