题目

编写一个类,用两个栈实现一个队列,并实现队列的基本操作(add,poll,peek)


思路

一个栈stackPush作为正常压入的栈,一个栈stackPop作为弹出的栈,将stackPush中的数据pop后再压入stackPop,此时从stackPop栈中pop的数据就是第一个进栈的数据,也就符合队列的FIFO(First in First out)。


注意

  1. stackPush必须一次性将其中的数据压入stackPop中
  2. stackPop中不为空时,stackPush不能往里压入数据

源码

public class twoStacksQueue{private Stack<Integer> stackPop;private Stacke<Integer> stackPush;public twoStacksQueue(){this.stackPush=new Stack<Integer>();this.stackPop=new Stack<Integer>();}public void add(int newNum){this.stackPush.push(newNum);}public int poll(){if(stackPop.empty()&&stackPush.empty()){throw new RuntimeException("Queue is empty.");}else if(stackPop.empty()){while(!stackPush.empty){stackPop.push(stackPush.pop());}}return stackPop.pop();}public int peek(){if(stackPop.empty()&&stackPush.empty()){throw new RuntimeException("Queue is empty.");}else if(stackPop.empty()){while(!stackPush.empty){stackPop.push(stackPush.pop());}}return stackPop.peek();}}

切忌注意中的两点,否则可能不符合队列先进先出的逻辑

栈与队列2——两个栈组成队列相关推荐

  1. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  2. 栈一:用两个栈实现队列

    /**  * 题目:用两个栈实现队列  * 描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.  * 解决方案:方法一:一个作为存储用,一个作为弹出用  * * ...

  3. 算法与数据结构题目的 PHP 实现:栈和队列 由两个栈组成的队列

    思路:同样使用 PHP 的数组模拟栈.栈的特点是先进后出,队列的特点是先进先出,可以用第一个栈(StackPush)作为压入栈,压入数据的时候只往这个栈中压入数据,第二个栈作(StackPop)为弹出 ...

  4. 用栈实现队列---用两个栈模拟实现一个队列

     入队列:直接将元素放进s1(s1栈顶为模拟队列的队尾); 出队列:如果s2非空,直接让s2出栈(s2栈顶为模拟队列的队头): 如果s2为空,将s1中所有元素导入s2中,然后让s2出栈. 获取队头元素 ...

  5. 两个队列实现一个栈思路c语言,两个栈实现队列功能C语言实现能运行!

    #include #include typedef struct sq { char *ps; int top; int Maxsize; }stack; void initstack(stack * ...

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

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

  7. python 用两个栈实现一个队列

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

  8. 程序员面试题精选100题(18)-用两个栈实现队列[数据结构]

    题目:某队列的声明如下: template<typename T> class CQueue { public:CQueue() {}~CQueue() {}void appendTail ...

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

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

最新文章

  1. Springboot中实现文件上传功能
  2. oracle表格颜色,如何在oracle中使用光标更新特定颜色
  3. Openfire3.10beta版源码在eclipse上部署编译
  4. [css] 使用css3实现一个斑马线的效果
  5. 9.11排序与查找(二)——对字符串数组进行排序,将全部的变位词排在相邻的位置...
  6. 2007.12.25 2个意外惊喜
  7. 图片相似度判断-差异值哈希算法JAVA版
  8. 计算机开机按f1,开机要按F1怎么解决?电脑开机不按F1进去系统的方法
  9. 【踩坑】mirai登陆失败反复验证码或提示登录存在安全风险或提示版本过低的解决方法
  10. 问题解决:系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的about_Execution_Policies
  11. 数学之美:各个击破算法和Google云计算的基础
  12. JavaWeb - 仿小米商城(5):商品详情展示
  13. ABAP 创建及修改采购申请
  14. md5加密以及可逆的加密解密算法
  15. 码元,码元速率,波特率,比特率,数据率的理解
  16. 张一鸣:一个技术男的BAT突围战
  17. 前端工程师能够用很低的学习本钱来运用它完成常用的效劳端代码
  18. Nwafu-OJ-1418 Problem P C语言实习题四——1.字符串连接
  19. 固态硬盘的好处以及固态硬盘和普通硬盘的区搜索别
  20. 2004世界中文BBS爆笑签名档

热门文章

  1. 程序员四大焦虑瞬间:拿什么拯救你,我日益后退的发际线?
  2. Google 的自动驾驶车出事故,被人类撞的
  3. 天哪,路由器都能跑Docker了!
  4. 扫盲 docker 常用命令
  5. Elasticsearch 如何做到快速检索 - 倒排索引的秘密
  6. 天天都会写接口(interface),但它的用途和好处有多少人能说得清楚?
  7. 2w字长文,让你瞬间拥有「调用链」开发经验
  8. 近200万奖金!仅限在校生!DIGIX全球校园AI算法大赛来了
  9. 机器学习防止模型过拟合的讲解
  10. 【IEEE出版-EI检索】第三届IEEE信息与计算机前沿技术国际学术会议