数据结构与算法分析(Java 语言描述)(35)—— 使用两个栈实现一个队列
来源:互联网 发布:pda软件开发 编辑:程序博客网 时间:2024/04/30 02:55
思路:
当进行入队操作的时候
- 检查 stack_2 是否为空
- 若 stack_2 非空,将 stack_2 中的数据放入 stack_1 中
- 将需要入队的数据 push 到 stack_1 中
当进行出队操作的时候
- 检查 stack_1 是否为空
- 若 stack_1 非空,将 stack_1 的数据放入 stack_2 中
- 将 stakc_2 的栈顶元素 pop 出栈
大致的示意图
package com.dataStructure.queue;import java.util.Stack;public class UseStackToImplQueue { private Stack<Integer> stack_1; private Stack<Integer> stack_2; private int count; public UseStackToImplQueue(){ stack_1 = new Stack<>(); stack_2 = new Stack<>(); count = 0; } public void enqueue(int num){// if (stack_1.isEmpty() && stack_2.isEmpty()){// stack_1.push(num);// }else if (!stack_2.isEmpty()){// while (!stack_2.isEmpty()){// stack_1.push(stack_2.pop());// }// stack_1.push(num);// } while (!stack_2.isEmpty()){ stack_1.push(stack_2.pop()); } stack_1.push(num); count++; } public int dequeue(){// if (!stack_2.isEmpty()){// return stack_2.pop();// }else {// while (!stack_1.isEmpty()){// stack_2.push(stack_1.pop());// }// return stack_2.pop();// } while (!stack_1.isEmpty()){ stack_2.push(stack_1.pop()); } count--; return stack_2.pop(); } public boolean isEmpty(){ return count == 0; } public static void main(String[] args){ UseStackToImplQueue queue = new UseStackToImplQueue(); queue.enqueue(6); queue.enqueue(2); queue.enqueue(1); queue.enqueue(3); queue.enqueue(5); queue.enqueue(7); while (!queue.isEmpty()){ System.out.print(queue.dequeue() + " "); } System.out.println(); System.out.println("----------------------------"); Stack<Integer> stack = new Stack<>(); stack.push(6); stack.push(2); stack.push(1); stack.push(3); stack.push(5); stack.push(7); while (!stack.isEmpty()){ System.out.print(stack.pop() + " "); } }}
输出结果:
阅读全文
0 0
- 数据结构与算法分析(Java 语言描述)(35)—— 使用两个栈实现一个队列
- 数据结构与算法分析(Java 语言描述)(36)—— 使用两个队列实现一个栈
- (数据结构与算法分析 四)------数组循环队列的实现( Java语言描述)
- 数据结构与算法(Java语言描述)--栈和队列
- 数据结构与算法分析(Java语言描述)(30)—— 有权图的实现
- 队列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 队列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 队列 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 数据结构与算法之—两个栈实现一个队列
- (数据结构与算法分析 七)------优先队列中的二叉堆的实现( Java语言描述)
- 读书笔记:数据结构与算法分析(Java语言描述)——数据结构概论
- 《数据结构与算法分析——java语言描述(第二版)》中树实现的一点思考
- 数据结构与算法分析(Java语言描述)(28)—— 使用 dfs 求两节点间的路径
- 数据结构与算法分析——Java语言描述
- 《数据结构与算法分析—Java语言描述》pdf
- LightOJ
- jsp页面传参
- 160个练手CrackMe-039
- GIT -- gitflow分支模型
- 问题记录
- 数据结构与算法分析(Java 语言描述)(35)—— 使用两个栈实现一个队列
- Reinforcement Learning_By David Silver笔记一: Introduction
- Algorithm之路八:String to Imteger
- Delaunay三角网生成算法
- [转载]Ubuntu 16.04编译安装OpenCV(Python2 /python3)(使用虚拟环境)
- 快速删除所有空值:汪琪玩Excel第十四招
- Go Context包使用
- C#model类与XML转换类
- 使用python实现正整数的阶乘