题目要求:

  某队列的声明如下:

   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题 第五十七题】相关推荐

  1. 用两个栈实现队列(剑指offer第五题)

    一.题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 二.思路解析 方法一.自己的笨方法   stack1的状态 stack2的状态   如果stack1 ...

  2. [剑指offer]面试题7:用两个栈实现队列

    面试题7:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 用两个栈模 ...

  3. 剑指offer:面试题09. 用两个栈实现队列

    题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...

  4. 剑指offer_第5题_用两个栈实现队列

    题目描述 用两个栈来实现一个队列 完成队列的Push和Pop操作 队列中的元素为int类型 理解 关于栈 什么是栈 栈的抽象数据类型 Python实现栈 关于队列 什么是队列 队列抽象数据类型 Pyt ...

  5. 《LeetCode力扣练习》剑指 Offer 09. 用两个栈实现队列 Java

    <LeetCode力扣练习>剑指 Offer 09. 用两个栈实现队列 Java 一.资源 题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 de ...

  6. 剑指Offer #05 用两个栈实现队列(模拟)

    题目来源:牛客网-剑指Offer专题 题目地址:用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目解析 首先,我们需要知道一下基本知 ...

  7. 【干货】容器适配器实现两个栈模拟队列

    用两个栈模拟队列的思想就是"倒水思想",这里我们用自定义类型模拟出线性表,再用线性表做容器实现栈的数据结构,最后用栈来实现队列,代码如下: #include<iostream ...

  8. 剑指offer第二版-9.用两个栈实现队列

    描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...

  9. 《剑指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]*. ...

最新文章

  1. linux中oracle静默安装失败,oracle 11 Linux 静默安装 步骤及错误解决(更新中)
  2. 对称加密算法之分组加密的六种工作模式(ECB、CBC、PCBC、CFB、OFB、CTR)
  3. 【算法竞赛学习】资金流入流出预测-挑战Baseline_建模预测
  4. linux c之加入了加入原文件 math.h调用abs()函数出现implicit declaration of function错误
  5. php yaf 教程,干货:PHP YAF框架实践教程——配置与多模块
  6. [轉]MS SQL 显示表结构
  7. OpenCV for Android开发环境Win7平台搭建(转)
  8. 2021-03-08
  9. C#全局钩子参考文章
  10. VUE游戏设计:实现外星人的攻击冲击波
  11. [4G5G专题-44]:物理层-物理层信道编码与交织加扰以及LDPC码与Polar码比较
  12. 65536个连接”误解
  13. wpf展开树节点_WPF中展开一个TreeView控件的所有树节点
  14. 2023年武汉音乐学院民族声乐考研上岸前辈备考经验
  15. 第十六届中国大数据技术大会五大分论坛顺利举办!
  16. matlab 与VS混合编程的几个问题
  17. 问渠那得清如许,唯有源头活水来
  18. 安搭Share:如果说格局决定人生,那么什么决定格局
  19. 国内外关于监管企业内控的法律文件
  20. 复现 MMDetection

热门文章

  1. 面相终端的计算机网络的阶段特征,计算机网络习题汇编
  2. android8支持设备,Android8.0奥利奥支持机型有哪些 安卓8.0奥利奥适合设备详细介绍...
  3. vue 动态绑定 video src,不能正常播放问题
  4. vue 拖拽(笔记)
  5. 在线阅读试听视频小程序模板源码
  6. python安装第三方库-常见错误解决
  7. linux ftp 操作命令
  8. 通过RSS订阅、邮件转发自动同步多个Blog
  9. memcache_engine + memcachedb = 高性能分布式内存数据库
  10. Linux查看与修改时区、时间的命令