CLRS10.1-7练习 - 用双队列实现栈
算法中心思想:
始终向非空队列进行入队操作
初始化时两个队列都为空,我们对q1进行入队操作
入栈:
只需执行其中一个队列入队操作即可,
具体操作哪一个队列,用一个标记变量标记
出栈流程图
代码实现
package hello;
import java.util.*; public class TwoQueueOneStack<E> {
private Queue<E> q1 = new LinkedList<>();
private Queue<E> q2 = new LinkedList<>();
private String pushFlag = "q1"; public void push(E item){
if(pushFlag == "q1"){
q1.add(item);
}
if(pushFlag == "q2"){
q2.add(item);
}
} public E pop(){
E top;
if(!empty()){
if(!q1.isEmpty()) {
top = move(q1, q2);
this.pushFlag = "q2";
} else {
top = move(q2, q1);
this.pushFlag = "q1";
}
}else{
throw new ArrayIndexOutOfBoundsException();
}
return top;
} private E move(Queue<E> qSource, Queue<E> qTarget){
Iterator<E> it = qSource.iterator();
while(it.hasNext()){
E item = it.next();
if(it.hasNext()){
qTarget.add(item);
}else{
qSource.clear();
return item;
}
} throw new ArrayIndexOutOfBoundsException();
} public boolean empty(){
if (q1.isEmpty() && q2.isEmpty())
return true;
else
return false;
} public static void main(String[] args){
TwoQueueOneStack<Integer> tqos = new TwoQueueOneStack<>();
for (int i = 0; i < 20; i++) {
tqos.push(i);
}
for (int i = 0; i < 10; i++){
System.out.println(tqos.pop());
}
for (int i = 20; i < 40; i++){
tqos.push(i);
}
for (int i = 0; i < 30; i++){
System.out.println(tqos.pop());
}
} }
CLRS10.1-7练习 - 用双队列实现栈的更多相关文章
- 王霸雄图荣华敝屣,谈笑间尽归尘土|基于Python3双队列数据结构搭建股票/外汇交易匹配撮合系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_192 如果你爱他,那么送他去股市,因为那里是天堂:如果你恨他,送他去股市,因为那里是地狱. 在过去的一年里,新冠疫情持续冲击世界经 ...
- [Swift]LeetCode225. 用队列实现栈 | Implement Stack using Queues
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- LeetCode--255--用队列实现栈(java版)
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...
- 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)
目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...
- LeetCode--225--用队列实现栈
问题描述: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队 ...
- 【leetcode 简单】 第六十三题 使用队列实现栈
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...
- 数据结构与算法(3)----->队列和栈
1. 栈和队列的基本性质 栈是先进后出;(像是子弹夹,后进先打出) 队列是先进先出;(像是平时排队买冰淇淋,按顺序轮流) 栈和队列在实现的结构上可以有数组和链表两种形式; (1)数组结构实现容易; ( ...
- 单调队列 && 单调栈
单调队列 && 单调栈 单调队列 维护某个滑动区间的min or max,可用于dp的优化 以维护min为例,采用STL双端队列实现 每次加入元素x前 先检查队首元素==滑动后要删除的 ...
- 集合线性表--List之LinkedList(队列与栈)
队列和栈1. Queue 队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素.队列遵循 ...
随机推荐
- MyBatis框架,增删改查
一.recourses中核心配置文件mybatis-config.xml 二. recourse中jdbc.properties 三.entity实体类 四.Dao层 五.ISmbmsUserDao. ...
- centos7 出现“FirewallD is not running”
原因:没有开启防火墙 #提示没有开启防火墙服务,–permanent #永久生效,没有此参数重启后失效 [root@uJZ ~]# firewall-cmd --permanent --zone=/t ...
- python .md5 加密
import hashlib hash = hashlib.md5() hash.update(text.encode('utf-8')) print(hash.hexdigest())
- java8 instant localDateTime
- Xshell远程登录
1.xshell由一台服务器a登录另一台服务器b sftp -oPort = root@ip 2.下载git /上传pull git b服务器想下载的目标文件目录 a服务器上的文件下载目录
- js正则判断字符串中是否包含特殊字符和空格
字符串只能是数字.字母和中文组成,不能包含特殊符号和空格. /^[\u4e00-\u9fa5_a-zA-Z0-9]+$/
- 软件开发的podcast
目录 中文 喜马拉雅 https://www.ximalaya.com/ SingularFM 8个开发者值得一听的英文 Podcast https://zhuanlan.zhihu.com/p/24 ...
- mysql时间和本地时间相差13个小时的问题
首先需要查看mysql的当前时区,用time_zone参数 mysql> show variables like '%time_zone%'; +------------------+----- ...
- IfcDirection
The IfcDirection provides a direction in two or three dimensional space depending on the number of D ...
- 对step文件进行信息抽取算法
任务描述:给定一个step文件,对该文件的字符串进行信息抽取,结构化的组织文件描述模型的数据.形成抽象化数据结构,存入计算机数据库.并能按照有条理结构把这些数据展示出来. 信息抽取的结果描述: 1 数 ...