【面试题7】用两个栈实现队列
【题目描述】
用两个栈实现一个队列。队列的声明如下,请实现他的两个函数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】用两个栈实现队列相关推荐
- 剑指offer:面试题09. 用两个栈实现队列
题目:用两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有 ...
- 剑指Offe面试题:用两个栈实现队列
用两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析 首先可以自己尝试使用1 2 3少量元素的入栈出栈摸索两个栈的使用,从特殊到一般 ...
- 面试题 03.04. 化栈为队/面试题09. 用两个栈实现队列/232. 用栈实现队列
2020-05-08 1.题目描述 用两个栈实现一个队列 2.题解 将一个栈用来进行入操作,另一个进行出操作,入栈直接入,出栈的时候如果是空的则把另一个 栈中的所有元素移动过来,再进行出栈,否则直接出 ...
- 剑指Offer - 面试题9. 用两个栈实现队列
1. 题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,del ...
- 剑指offer面试题[7]-用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路: 一个队列包含两个栈,这道题目的意图是要求我们操作两个"先进后出"的栈实现 ...
- 剑指offer面试题09. 用两个栈实现队列(队列、栈)
题目描述 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素,dele ...
- 剑指offter-面试题7.用两个栈实现队列
题目.用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead分别完成在对尾插入节点和在队头删除节点. 该队列类模板如下: 1 template <ty ...
- 《剑指offer》第九题(用两个栈实现队列)
// 面试题:用两个栈实现队列 // 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的 ...
- [剑指offer]面试题7:用两个栈实现队列
面试题7:用两个栈实现队列 题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 用两个栈模 ...
- 剑指offer——面试题7:用两个栈实现队列
剑指offer--面试题7:用两个栈实现队列 Solution1: 注意栈的基本操作与vector略有不同~ class Solution { public:void push(int node) { ...
最新文章
- 《高性能科学与工程计算》——3.7 习题
- htc g12刷机的成功经验--只面向小白
- 《Windows via C/C++》学习笔记 —— Windows 线程池
- workarea8php,oracle PGA管理(算法)
- vim编写python没有代码提示_vim编写python自动补全
- html5输入框自动放大镜,JS 仿支付宝input输入显示数字放大镜
- Dubbo接口测试方法及步骤
- 将字符串分割为指定长度的子字符串
- (47)网页布局常用工具
- 炫彩渐变液态海报设计,太skr了!
- java基础-- 集合框架入门 及 List集合
- Professor forcing算法
- 基于JAVA养老院管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
- 爱博精电亮相四川省节能环保品牌推广全川行——乐山站
- Python选修课第一届Turtle绘图大赛田康林赵冰珂组
- 父子组件的生命周期执行顺序
- 求两向量在0~360度之间的角度值及实际应用
- 语义分割-CyCADA: Cycle-Consistent Adversarial Domain Adaptation.循环一致对抗领域自适应
- 三级分销如何合规分账?
- 简单入门到彻底搞懂防抖和节流
热门文章
- linux进程睡眠的介绍
- 设置eclipse中的字体大小
- 在windows Console 平台下面 用glut编写 opengl程序 注意
- 雷林鹏分享:PHP XML Parser 函数
- bzoj2298: [HAOI2011]problem a
- 一个前端妹子的悲欢编程之路
- Xtrabackup2.4.8备份、还原、恢复Mysql5.7.19实操
- Eclipse中屏蔽日志
- 第1节 kafka消息队列:5、javaAPI操作
- TensorRTSamplePython[end_to_end_tensorflow_mnist]