使用栈Stack实现队列Queue
来源:互联网 发布:企业社会责任数据 编辑:程序博客网 时间:2024/06/05 09:24
如何只使用stack实现queue呢?由于stack是现进后出(FILO),而queue是先进先出的(FIFO)。也就是说stack进行了一次反向,进行两次反向就能实现queue的功能,所以可以用两个stack实现queue。
假设两个栈inStack和outStack,且都为空。可以认为onStack提供入队的功能,栈outStack提供出队的功能。下面是入队和出队的具体算法:
(1)如果栈outStack不为空,直接弹出栈outStack顶部的数据;
(2)如果栈outStack为空,则依次弹出栈inStack的数据,放入栈outStack中,再弹出栈outStack顶部的数据;
实现的代码:
/** * 使用两个栈来模拟队列 * * @param <T> * */public class SimulationQueue<T> {private Stack<T> inStack;private Stack<T> outStack;public SimulationQueue() {inStack = new Stack<T>();outStack = new Stack<T>();}/** * 入队 * * @param t */public void enqueue(T t) {inStack.push(t);}/** * 出队 */public T dequeue() {T temp = null;if (!outStack.isEmpty()) {temp = outStack.pop();} else {while (!inStack.isEmpty()) {temp = inStack.pop();outStack.push(temp);}if (!outStack.isEmpty()) {temp = outStack.pop();}}return temp;}/** * 队列是否为空 * * @return */public boolean isEmpty() {return inStack.isEmpty() && outStack.isEmpty();}/** * 清空队列 */public void clear() {inStack.clear();outStack.clear();}}
测试代码:
public static void main(String[] args) {SimulationQueue<String> queue = new SimulationQueue<String>();queue.enqueue("a");queue.enqueue("b");queue.enqueue("c");queue.enqueue("d");while(!queue.isEmpty()){System.out.println("当前出队元素:"+queue.dequeue());}}
输出:
0 0
- 使用栈Stack实现队列Queue
- 面试题---使用栈stack实现队列queue
- 使用两个栈(stack)实现一个队列(queue)
- 利用栈Stack实现队列(Queue)
- python实现stack(栈)和队列(queue)
- Java实现栈Stack和队列Queue
- stack 栈 queue 队列
- 栈Stack和队列Queue
- 栈stack与队列queue
- 栈Stack和队列Queue
- java实现数据结构——栈Stack与队列Queue
- 栈,队列 以及 stack, queue 的相互实现
- 栈,队列 以及 stack, queue 的相互实现 .
- Java实现数据结构栈stack和队列Queue
- 用两个栈(Stack)实现一个队列(Queue)
- 用两个栈(Stack)实现一个队列(Queue)
- 用两个栈(Stack)实现一个队列(Queue)
- 自己实现一个栈(Stack)和队列(Queue)
- 进行命令处理的典型程序框架
- 如何让自己远离被裁员的命运
- ios 手势事件
- Vijos1130. 数的计数
- 21世纪传媒发行人总经理主编被采取强制措施
- 使用栈Stack实现队列Queue
- Linux tcpdump命令详解
- UITableView中点击不同Cell跳转到不同的View
- android蓝牙通信
- iOS tableViewCell点击后显示下拉菜单
- Thread和Service应用场合的区别
- HTML传递参数的方法和例子
- 文本分类学习
- MTK camera image sensor driver