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

用两个栈模拟一个队列的操作:

代码如下:

#include <iostream>
#include <stack>
using namespace std;template <typename T>
class CQueue
{public:CQueue(void);~CQueue(void);void appendTail(const T&element);T deleteHead();private:stack<T>stack1;stack<T>stack2;
};template<typename T>
void CQueue<T>::appendTail(const T&element)
{stack1.push(element);
}template<typename T>
T CQueue<T>::deleteHead()
{if (stack2.size() <= 0){while (stack1.size() > 0){T &data = stack1.top();stack1.pop();stack2.push(data);}}if (stack2.size() == 0) throw new exception("queue is empty");T head = stack2.top();stack2.pop();return head;
}

测试用例:
● 往空的队列里添加、删除元素。
● 往非空的队列里添加、删除元素。
● 连续删除元素直至队列为空。
本题考点:
● 考查对栈和队列的理解。
● 考查写与模板相关的代码的能力。
● 考查分析复杂问题的能力。本题解法的代码虽然只有只有20几行代码,但形成正确的思路却不容易。应聘者能否通过具体的例子分析问题,通过画图的手段把抽象的问题形象化,从而解决这个相对比较复杂的问题,是能否顺利通过面试的关键。

[剑指offer]面试题7:用两个栈实现队列相关推荐

  1. 剑指Offer - 面试题9. 用两个栈实现队列

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

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

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路: 一个队列包含两个栈,这道题目的意图是要求我们操作两个"先进后出"的栈实现 ...

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

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

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

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

  5. 剑指Offe面试题:用两个栈实现队列

    用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析 首先可以自己尝试使用1 2 3少量元素的入栈出栈摸索两个栈的使用,从特殊到一般 ...

  6. 剑指offer(05)用两个栈实现队列

    参考:https://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html 思路1:始终维护s1作为存储空间,以s2作为临时缓冲 ...

  7. 剑指offer——面试题37:两个链表的第一个公共结点

    剑指offer--面试题37:两个链表的第一个公共结点 20180906整理 Solution1: 时间复杂度为O(n2)O(n2)O(n^2)的垃圾算法 /* struct ListNode {in ...

  8. [剑指offer]面试题37:两个链表的第一个公共结点

    面试题37:两个链表的第一个公共结点 题目:输入两个链表,找出它们的第一个公共结点.链表结点定义如下: struct ListNode {int val;ListNode *next;ListNode ...

  9. 剑指Offer面试题:31.两个链表的第一个公共节点

    一.题目:两个链表的第一个公共节点 题目:输入两个链表,找出它们的第一个公共结点. 链表结点定义如下,这里使用C#语言描述: public class Node{public int key;publ ...

  10. 【剑指offer-Java版】07用两个栈实现队列

    两个栈实现一个队列:stack_1 stack_2 入队操作:直接入stack_1 出队操作:如果stack_2不为空,那么从其中弹出一个作为出队元素,否则将stack_1元素全部依次压入stack_ ...

最新文章

  1. 漫话:全球 IPv4 地址正式耗尽?是时候说说到底什么是IPv4和IPv6了!
  2. SAP freelancer接SAP项目的几种方法
  3. [译] 2018 年七个通过脑电图分析实现“读心术”的 Javascript 库
  4. 需求规格说明书格式及要求
  5. Cloud for Customer mobile应用里pass Code登录界面的绘制原理
  6. vxWorks下常用的几种延时方法
  7. [蓝桥杯2018初赛]第几个幸运数-数论+枚举
  8. 实例31:python
  9. Redis(二):Redis的安装及配置(2)---设置启动信息
  10. javascript中call和apply的区别
  11. js加密代码的分析[转]
  12. Koa v2.x 中文文档 上下文(Context)
  13. 软件过程与项目管理第二周作业
  14. Spring Security构建Rest服务-1401-权限表达式
  15. eclipse—安装ADT插件搭建安卓开发环境
  16. 卡王。卡皇一个不为人知的密秘.必看(转)
  17. 智能电视有网但是服务器超时,智能电视越用越卡怎么办?四招教你解决电视卡顿...
  18. 微信小程序-仿智行火车票12306
  19. 剑指offer算法题分析与整理(二)
  20. elastalert控制警报时间段

热门文章

  1. 【ArcGIS遇上Python】Python批量将多个文件夹下的多个影像数据镶嵌至新栅格
  2. Android之升级OkHttp编译提示错误如下Using ‘body(): ResponseBody?’ is an error. moved to val
  3. Android之app作为服务器解决跨域问题
  4. Android之解决ViewPager2+PhotoView滑动图片花屏问题
  5. Android之提示Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
  6. linux C语言之called object ‘maze’ is not a function or function pointer printf(“%d\t“, maze(i, j))
  7. 现在的娃娃有多智能?
  8. 别薅了别薅了!!!再薅就真的被薅秃了!!
  9. 数学建模,还得这样学!
  10. 小米3g刷高格固件_小米路由器3G刷了老毛子之后恢复官方固件