Java之用栈实现队列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之用栈实现队列相关的知识,希望对你有一定的参考价值。
队列是一种典型的先进先出数据结构,队列的实现方式有很多种,比如数组,比如链表等,队列也可以用两个栈来实现,下面就用两个栈实现一个队列。
原理
两个栈中,一个栈用来入队,叫他入队栈,另一个栈用来出队,叫出队栈。
当入队时,我们直接把元素压入入队栈。
当出队时,分两种情况:
①若出队栈不为空,则直接出队栈栈顶元素出栈
②若出队栈为空,则入队栈元素依次出栈并压入出队栈,然后出队栈出栈
具体实现
知道了原理后,实现起来就很简单啦,这里我们借助JDK中的java.util.stack类来作为我们队列中的栈,JDK实现的这个栈继承了Vector类,所以他的底层也是用到了数组。
代码如下
package com.gdut.ds.queue; import java.util.Stack; /** * 用两个栈实现队列 */ public class Queue<T> { /** * 入队栈 */ private Stack<T> inStack = new Stack<T>(); /** * 出队栈 */ private Stack<T> outStack = new Stack<T>(); /** * 队列大小 */ private int size; /** * 入队 */ public void enqueue(T obj) { inStack.push(obj); size++; } /** * 出队 * @return */ public T dequeue() { T obj = null; if(outStack.empty()) { while(!inStack.empty()){ outStack.push(inStack.pop()); } } obj = outStack.pop(); size--; return obj; } /** * 队列的大小 * @return */ public int size() { return size; } /** * 队列是否为空 * @return */ public boolean empty() { return size == 0; } }
测试
Queue<String> queue = new Queue<>(); queue.enqueue("Hello"); queue.enqueue("My"); queue.enqueue("Name"); queue.enqueue("is"); queue.enqueue("YangHao"); System.out.println(queue.size()); while(!queue.empty()){ System.out.println(queue.dequeue()); }
结果如下
5 Hello My Name is YangHao
当队列没有元素时,Stack类会抛一个EmptyStackExcep。
以上是关于Java之用栈实现队列的主要内容,如果未能解决你的问题,请参考以下文章