算法中心思想:

始终向非空队列进行入队操作

初始化时两个队列都为空,我们对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练习 - 用双队列实现栈的更多相关文章

  1. 王霸雄图荣华敝屣,谈笑间尽归尘土|基于Python3双队列数据结构搭建股票/外汇交易匹配撮合系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_192 如果你爱他,那么送他去股市,因为那里是天堂:如果你恨他,送他去股市,因为那里是地狱. 在过去的一年里,新冠疫情持续冲击世界经 ...

  2. [Swift]LeetCode225. 用队列实现栈 | Implement Stack using Queues

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  3. LeetCode--255--用队列实现栈(java版)

    使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...

  4. 【LeetCode题解】225_用队列实现栈(Implement-Stack-using-Queues)

    目录 描述 解法一:双队列,入快出慢 思路 入栈(push) 出栈(pop) 查看栈顶元素(peek) 是否为空(empty) Java 实现 Python 实现 解法二:双队列,入慢出快 思路 入栈 ...

  5. LeetCode--225--用队列实现栈

    问题描述: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队 ...

  6. 【leetcode 简单】 第六十三题 使用队列实现栈

    使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...

  7. 数据结构与算法(3)----->队列和栈

    1. 栈和队列的基本性质 栈是先进后出;(像是子弹夹,后进先打出) 队列是先进先出;(像是平时排队买冰淇淋,按顺序轮流) 栈和队列在实现的结构上可以有数组和链表两种形式; (1)数组结构实现容易; ( ...

  8. 单调队列 && 单调栈

    单调队列 && 单调栈 单调队列 维护某个滑动区间的min or max,可用于dp的优化 以维护min为例,采用STL双端队列实现 每次加入元素x前 先检查队首元素==滑动后要删除的 ...

  9. 集合线性表--List之LinkedList(队列与栈)

    队列和栈1. Queue 队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素.队列遵循 ...

随机推荐

  1. A*G`C002

    AGC002 A Range Product 不会,弃疗了/kk https://agc002.contest.atcoder.jp/submissions/7908938 B Box and Bal ...

  2. 《ELK Stack权威指南》读书笔记

    Logstack: 1.Logstack介绍:Logstash is an open source data collection engine with real-time pipelining c ...

  3. pytesseract.pytesseract.TesseractError: (1, 'Error opening data file /usr/local/share/tessdata/chi_sim.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata"

    pytesseract.pytesseract.TesseractError: (1, 'Error opening data file /usr/local/share/tessdata/chi_s ...

  4. gcc 编译c++文件

    #include <stdio.h> //将类定义在命名空间中 namespace Diy{ class Student{ public: char *name; int age; flo ...

  5. go - helloword

    package mainimport "fmt" //一定要双引号func main() {/* test hello word *///test fmt.Println(&quo ...

  6. Http协议以及Httpclient

    一.HTTP之请求消息Request 客户端发送一个HTTP请求到服务器的请求消息包括以下格式: 请求行(request line).请求头部(header).空行和请求数据四个部分组成. Http请 ...

  7. Spark2.x(六十三):(Spark2.4)Driver如何把Task(闭包等)分配给Executor

    在Spark中一个appliation可能包含多个job,每个job都是由SparkContext#runJob(...)触发的,一个Job下包含1个或多个Stage,Job的最后一个stage为Re ...

  8. FTO Obesity Variant Circuitry and Adipocyte Browning in Humans

    好文献非常难得,提供了核心的研究思路. FTO Obesity Variant Circuitry and Adipocyte Browning in Humans - 这篇文章需要好好的解析 为深入 ...

  9. IDEA 如何导出 todo 列表

    众所周知,IDEA 可以直接查看所有的 todo 列表, 快捷键是 Alt + 6 然后右键文件夹,选择[Expand All],展开所有目录 再然后,先选中最上边的文件,单击, 再选中最后一个文件, ...

  10. 使用ssh-keygen生成私钥和公钥

    1.使用ssh-keygen生成私钥和公钥 命令如下: ssh-keygen -t rsassh-keygen -t rsa -C "用户名自取"可以是邮箱 例子: fdipzon ...