1. #include "Queue.h"
  2.  
  3. // ====================测试代码====================
  4. void Test(char actual, char expected)
  5. {
  6. if(actual == expected)
  7. printf("Test passed.\n");
  8. else
  9. printf("Test failed.\n");
  10. }
  11.  
  12. int main(int argc, char* argv[])
  13. {
  14. CQueue<char> queue;
  15.  
  16. queue.appendTail('a');
  17. queue.appendTail('b');
  18. queue.appendTail('c');
  19.  
  20. char head = queue.deleteHead();
  21. Test(head, 'a');
  22.  
  23. head = queue.deleteHead();
  24. Test(head, 'b');
  25.  
  26. queue.appendTail('d');
  27. head = queue.deleteHead();
  28. Test(head, 'c');
  29.  
  30. queue.appendTail('e');
  31. head = queue.deleteHead();
  32. Test(head, 'd');
  33.  
  34. head = queue.deleteHead();
  35. Test(head, 'e');
  36.  
  37. return ;
  38. }

QueueWithTwoStacks.cpp

  1. // 面试题9:用两个栈实现队列
  2. // 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail
  3. // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
  4.  
  5. #pragma once
  6. #include <stack>
  7. #include <exception>
  8. #include<stdio.h>
  9. #include<stdexcept>
  10.  
  11. using namespace std;
  12.  
  13. template <typename T> class CQueue
  14. {
  15. public:
  16. CQueue(void);
  17. ~CQueue(void);
  18.  
  19. // 在队列末尾添加一个结点
  20. void appendTail(const T& node);
  21.  
  22. // 删除队列的头结点
  23. T deleteHead();
  24.  
  25. private:
  26. stack<T> stack1;
  27. stack<T> stack2;
  28. };
  29.  
  30. template <typename T> CQueue<T>::CQueue(void)
  31. {
  32. }
  33.  
  34. template <typename T> CQueue<T>::~CQueue(void)
  35. {
  36. }
  37.  
  38. template<typename T> void CQueue<T>::appendTail(const T& element)
  39. {
  40. stack1.push(element);
  41. }
  42.  
  43. template<typename T> T CQueue<T>::deleteHead()
  44. {
  45. if(stack2.size()<= )
  46. {
  47. while(stack1.size()>)
  48. {
  49. T& data = stack1.top();
  50. stack1.pop();
  51. stack2.push(data);
  52. }
  53. }
  54.  
  55. if(stack2.size() == ){
  56. std::logic_error ex("queue is empty");
  57. throw std::exception(ex);
  58. }
  59.  
  60. T head = stack2.top();
  61. stack2.pop();
  62.  
  63. return head;
  64. }

Queue.h

剑指offer——面试题9:用两个栈实现队列的更多相关文章

  1. 剑指Offer:面试题7——用两个栈实现队列(java实现)

    题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 首先定义两个栈 Stack<Integer> stack1 = new Stack<I ...

  2. 剑指Offer - 九度1512 - 用两个栈实现队列

    剑指Offer - 九度1512 - 用两个栈实现队列2013-11-29 21:23 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入 ...

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

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

  4. 剑指offer【05】- 用两个栈实现队列(java)

    题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...

  5. 剑指offer(9)——用两个栈实现队列

    题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路: 首先定义两个栈stack1. ...

  6. JS 剑指Offer(六) 用两个栈实现队列

    题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1 分析:在队列的尾部插入 ...

  7. 剑指Offer-【面试题07:两个栈实现队列】

    package com.cxz.question7; import java.util.Stack; /** * 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail 和del ...

  8. 剑指offer(5)用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目分析 栈是先进后出,队列是先进先出,因此两个栈,一个用来push,一个用来pop,同时注意下两个栈不 ...

  9. 【剑指Offer】5、用两个栈实现队列

      题目描述:   用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.   解题思路:   本题的基本意图是:用两个后入先出的栈来实现先入先出的队列.对于这个问题,我 ...

  10. 【剑指Offer】05、用两个栈实现队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题解一: //stack2有元素就pop,没有元素就将stack1中所有元素倒进来再pop public ...

随机推荐

  1. lambda,map,filter,reduce

    lambda 编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数.返回一个函数对象. func = lambda x,y:x+y fu ...

  2. ByteUnit

    JDK里面有TimeUnit,看spark源码有个ByteUnit.这个类还是挺不错的. public enum ByteUnit { BYTE (1), KiB (1024L), MiB ((lon ...

  3. BBS后台发送邮件&修改文章

    一:Django发送邮件 在setting中配置 # EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST ...

  4. springboot-条件化注解

    在项目中,有时会遇到我们的Configuration.Bean.Service等等的bean组件需要依条件按需加载的情况.那么Spring Boot怎么做的呢?它为此定义了许多有趣的条件,当我们将它们 ...

  5. 递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题

    原创 标题:递增三元组 给定三个整数数组A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN],请你统计有多少个三元组(i, ...

  6. MongoDB整理笔记の走进MongoDB世界

    本人学习mongodb时间不长,但是鉴于工作的需要以及未来发展的趋势,本人想更深层的认识mongodb底层的原理以及更灵活的应用mongodb,边学边工作实践.  mongodb属于nosql中算是最 ...

  7. Async异步委托

    /// <summary> /// 异步委托 /// </summary> public delegate void AsyncHandler(); public static ...

  8. AES加密 AESCrypt 类

    /// <summary> /// AES加密 /// </summary> public sealed class AESCrypt { /// <summary> ...

  9. c++基础知识篇:指针

    从面试的反馈来看,这部分可以问的很难. 1.指针与引用的区别 指针是一个变量,用来存放地址的变量.引用是原来变量的存储空间的别名.   2.指针作为参数的要点 a.需要进行指针的合法性检验,防止空指针 ...

  10. SSI简介 与 nginx开启SSI

    Server Side Include : 服务器端嵌入 原理 : 将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本.图形或应用程序信息包含到网页中.因为包含 SSI 指令的文件 ...