【题目描述】

用两个栈实现一个队列。队列的声明如下,请实现他的两个函数AppendTail和DeleteHead,分别完成在队尾部插入结点和在队头删除结点的功能。

【解决方案】

stackAppend栈用来添加,stackDelete栈用于删除,当stackDelete栈没有元素时,则从stackAppend栈往stackDelete栈压入元素,再进行删除。看代码和图例你就懂了。

我的实现代码,仅供参考:

 1     class MyQueue<T>
 2     {
 3         Stack<T> stackAppend = new Stack<T>();
 4         Stack<T> stackDelete = new Stack<T>();
 5
 6         public void AppendTail(T value)
 7         {
 8             stackAppend.Push(value);
 9         }
10
11         public T DeleteHead()
12         {
13             if (stackDelete.Count <= 0)
14             {
15                 while (stackAppend.Count > 0)
16                 {
17                     stackDelete.Push(stackAppend.Pop());
18                 }
19             }
20             if (stackDelete.Count <= 0)
21                 throw new Exception("Queue is empty.");
22             return stackDelete.Pop();
23         }
24     }

【本题扩展】

用两个队列实现一个栈。

我的实现代码,仅供参考:

 1     class MyStack<T>
 2     {
 3         Queue<T> queueA = new Queue<T>();
 4         Queue<T> queueB = new Queue<T>();
 5
 6         public void Push(T value)
 7         {
 8             if (queueA.Count > 0)
 9             {
10                 queueA.Enqueue(value);
11             }
12             else
13             {
14                 queueB.Enqueue(value);
15             }
16         }
17
18         public T Pop()
19         {
20             if (queueA.Count > 0)
21             {
22                 while (queueA.Count > 1)
23                 {
24                     queueB.Enqueue(queueA.Dequeue());
25                 }
26                 return queueA.Dequeue();
27             }
28             else if (queueB.Count > 0)
29             {
30                 while (queueB.Count > 1)
31                 {
32                     queueA.Enqueue(queueB.Dequeue());
33                 }
34                 return queueB.Dequeue();
35             }
36             else
37             {
38                 throw new Exception("Stack is empty.");
39             }
40         }
41     }

转载于:https://www.cnblogs.com/HuoAA/p/4798493.html

【面试题7】用两个栈实现队列相关推荐

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

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

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

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

  3. 面试题 03.04. 化栈为队/面试题09. 用两个栈实现队列/232. 用栈实现队列

    2020-05-08 1.题目描述 用两个栈实现一个队列 2.题解 将一个栈用来进行入操作,另一个进行出操作,入栈直接入,出栈的时候如果是空的则把另一个 栈中的所有元素移动过来,再进行出栈,否则直接出 ...

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

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

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

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

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

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

  7. 剑指offter-面试题7.用两个栈实现队列

    题目.用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead分别完成在对尾插入节点和在队头删除节点. 该队列类模板如下: 1 template <ty ...

  8. 《剑指offer》第九题(用两个栈实现队列)

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

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

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

  10. 剑指offer——面试题7:用两个栈实现队列

    剑指offer--面试题7:用两个栈实现队列 Solution1: 注意栈的基本操作与vector略有不同~ class Solution { public:void push(int node) { ...

最新文章

  1. 《高性能科学与工程计算》——3.7 习题
  2. htc g12刷机的成功经验--只面向小白
  3. 《Windows via C/C++》学习笔记 —— Windows 线程池
  4. workarea8php,oracle PGA管理(算法)
  5. vim编写python没有代码提示_vim编写python自动补全
  6. html5输入框自动放大镜,JS 仿支付宝input输入显示数字放大镜
  7. Dubbo接口测试方法及步骤
  8. 将字符串分割为指定长度的子字符串
  9. (47)网页布局常用工具
  10. 炫彩渐变液态海报设计,太skr了!
  11. java基础-- 集合框架入门 及 List集合
  12. Professor forcing算法
  13. 基于JAVA养老院管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
  14. 爱博精电亮相四川省节能环保品牌推广全川行——乐山站
  15. Python选修课第一届Turtle绘图大赛田康林赵冰珂组
  16. 父子组件的生命周期执行顺序
  17. 求两向量在0~360度之间的角度值及实际应用
  18. 语义分割-CyCADA: Cycle-Consistent Adversarial Domain Adaptation.循环一致对抗领域自适应
  19. 三级分销如何合规分账?
  20. 简单入门到彻底搞懂防抖和节流

热门文章

  1. linux进程睡眠的介绍
  2. 设置eclipse中的字体大小
  3. 在windows Console 平台下面 用glut编写 opengl程序 注意
  4. 雷林鹏分享:PHP XML Parser 函数
  5. bzoj2298: [HAOI2011]problem a
  6. 一个前端妹子的悲欢编程之路
  7. Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操
  8. Eclipse中屏蔽日志
  9. 第1节 kafka消息队列:5、javaAPI操作
  10. TensorRTSamplePython[end_to_end_tensorflow_mnist]