您的位置:首页 > 理论基础 > 数据结构算法

【JAVA数据结构】先进先出队列

2016-09-21 22:11 387 查看
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

下面直接来看实现:

/**
* <p>先进先出队列</p>
*
* @author white
* @version $Id: MyQueen, v 0.1 2016/9/21 0021 下午 8:32 white Exp $
*/
public class MyQueen<T> {
/** 队列第一个元素 */
private Node first;
/** 队列最后元素 */
private Node last;
/** 队列大小 */
private int  size = 0;

/** 队列结构 */
private class Node {
T    item;
Node next;
}

/**
* 队列是否为空
* @return
*/
public boolean isEmpty() {
return size == 0;
}

/**
* 将元素压入队列尾部
* @param item
*/
public void push(T item) {
if (size == 0) {
first = new Node();
first.item = item;
last = first;
size++;
} else if (size > 0) {
Node newLast = new Node();
newLast.item = item;
last.next = newLast;
last = newLast;
size++;
}
}

/**
* 取出队列的第一个元素
* @return
*/
public T pop() {
if (size == 0) {
throw new ArrayIndexOutOfBoundsException();
}
Node oldFirst = first;
first = first.next;
size--;
return oldFirst.item;
}

/**
* 取队列深度
* @return
*/
public int size() {
return size;
}
}


调用以下方法来查看结果:

public static void main(String[] args) {
MyQueen<String> myQueen = new MyQueen<String>();
System.out.println("cosSize:" + myQueen.size());
for (int i = 0; i < 15; i++) {
myQueen.push("aaa" + i);
}
System.out.println("initSize:" + myQueen.size());
for (int i = 0; i < 15; i++) {
System.out.println(myQueen.pop());
}
System.out.println("popSize:" + myQueen.size());
}


执行结果:

cosSize:0
initSize:15
aaa0
aaa1
aaa2
aaa3
aaa4
aaa5
aaa6
aaa7
aaa8
aaa9
aaa10
aaa11
aaa12
aaa13
aaa14
popSize:0


如有疑问,欢迎提出。

我的博客:blog.scarlettbai.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息