用两个栈做队列(左程云算法学习)
利用两个栈实现队列的操作
`
题目:编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)
解答:栈:先进后出
队列:先进先出
设置两个栈,分别为stackPush 和stackPop,先将数据压入stackPush栈,然后数据按照先进后出规则弹出,弹出的数据再顺序压入stackPop栈,再将stackPop栈的数据弹出,这样下来,总体可看做一个先进先出的队列,从而实现目标。
下边为具体的代码实现:
package com.thread.ThreadTest1.Singleton.TwoStacksQueue;
import java.util.Stack;
public class TwoStacksQueue {
public Stack<Integer> stackPush;
public Stack<Integer> stackPop;
public TwoStacksQueue() {stackPush=new Stack<Integer>();stackPop=new Stack<Integer>();
}
public void add(int pushInt) {stackPush.push(pushInt);
}
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();//返回弹出栈的顶端}
}
用两个栈做队列(左程云算法学习)相关推荐
- 左程云算法笔记(四)哈希表和有序表的使用、链表
左程云算法笔记(四) 哈希表的使用 有序表的使用 链表 单链表反转 (LC206) 双向链表反转 打印两个有序链表的公共部分 合并两个有序链表(LC21) 判断一个链表是否为回文结构 (LC234) ...
- LeetCode左程云算法课笔记
左程云算法课笔记 剑指Offer 位运算 ^运算符理解 寻找出现双中的单数 取出一个数最右边1的位置 找所有双出现中的两个单数 整数二进制奇数位偶数位交换 数组中全部出现k次返回出现一次的数 链表 判 ...
- 左程云算法笔记总结-基础篇
基础01(复杂度.基本排序) 认识复杂度和简单排序算法 时间复杂度 big O 即 O(f(n)) 常数操作的数量写出来,不要低阶项,只要最高项,并且不要最高项的系数 一个操作如果和样本的数据量没有关 ...
- CSDN专访左程云,算法之道
算法的庞大让很多人畏惧,程序员如何正确的学习并应用于面试.工作中呢?今天,CSDN邀请了IBM软件工程师.百度软件工程师.刷题5年的算法热爱者左程云,来担任CSDN社区问答栏目的第二十六期嘉宾,届时会 ...
- 左程云 算法与数据结构基础班
排序优化 在C++的STL中为我们提供了很多排序函数如sort.stable_sort等等,平时我们也会直接使用这些现成的排序函数,为了让我们更加深层的了解底层的排序函数,现在我们从如何实现一个通用的 ...
- 左程云算法笔记总结-基础提升篇
提升01(哈希) 认识哈希函数 哈希函数的输入一般需要是无穷尽的,没有限制:输出可以有一定的范围,比如MD5加密后产生的字符串可以有2的32次方-1种,用十六进制表示需要16个字符. 相同的输入对应相 ...
- 左程云算法课—02课程笔记
目录 一.剖析递归行为和递归行为时间复杂度的估算 master公式的使用(满足子问题等规模) 二.归并排序 归并排序的扩展 小和问题 逆序对问题 三.荷兰国旗问题 问题一 问题二 四.快速排序 不改进 ...
- 【笔记:左程云算法与数据结构】4.链表
用快慢指针找到链表的中点 "定制"三种不同的情况 1.元素个数为偶数时,慢指针指向中间偏左的元素 2.元素个数为偶数时,慢指针指向中间偏右的元素 3.慢指针指向中间的前一个元素 代 ...
- 左程云算法 - 公开课笔记
第五节 题目:原地交换,不允许额外的空间 方法1:复杂度O(N/2) 1.左侧逆序 2.右侧逆序 3.整体逆序 方法2:循环右移 复杂度O(N^2) 方法3: 直到左右等长的时候,就不再交换了 第六节 ...
最新文章
- dart系列之:dart类中的泛型
- linux环境配置与使用合集
- Android 系统(193)----图解从URL到网页通信原理
- mysql如何撤销上一条指令_mysql命令行,多行命令时如何取消/返回修改前边的命令...
- Spring MVC 接收json自动转换JSONObject
- 百度核心技术:详解百度富媒体检索比对系统的关键技术
- 同事1000行又臭又长 的类!被我用IDEA几分钟重构!真香!
- java获取文件后缀名(正则表达式)+文件名
- MySQL索引性能测试
- android 蓝牙 录音,Android 实现蓝牙录音
- 数据处理可视化的最有价值的 50 张图 (上)
- JAVA面大厂简历怎么写_大厂程序员来谈一谈要如何写简历!!(附简历模板)...
- tesseract安装使用
- [css] css 3d 动画,跟随鼠标移动做球形旋转
- 【源自paddlex】基于PaddleX的钢板表面缺陷检测
- 2016年全国计算机一级成绩查询时间,2016年3月计算机一级考试成绩什么时候出来...
- Maya灯光【电影级灯光渲染-基础光】
- 利用F检验来检验自变量与因变量之间的关系能否用一个线性回归模型来表示
- 软件加密技术和注册机制加密基础(转)
- 一文彻底搞懂ROC曲线与AUC的概念