标签:cep image width log 两个栈实现队列 private 结构 链表 span
队列是一种典型的先进先出数据结构,队列的实现方式有很多种,比如数组,比如链表等,队列也可以用两个栈来实现,下面就用两个栈实现一个队列。
两个栈中,一个栈用来入队,叫他入队栈,另一个栈用来出队,叫出队栈。
当入队时,我们直接把元素压入入队栈。
当出队时,分两种情况:
①若出队栈不为空,则直接出队栈栈顶元素出栈
②若出队栈为空,则入队栈元素依次出栈并压入出队栈,然后出队栈出栈

知道了原理后,实现起来就很简单啦,这里我们借助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。
标签:cep image width log 两个栈实现队列 private 结构 链表 span
原文地址:http://www.cnblogs.com/gdutzyh/p/7447659.html