本文共 1914 字,大约阅读时间需要 6 分钟。
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
下面直接来看实现:
/** *先进先出队列
* * @author white * @version $Id: MyQueen, v 0.1 2016/9/21 0021 下午 8:32 white Exp $ */public class MyQueen{ /** 队列第一个元素 */ 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) { MyQueenmyQueen = new MyQueen (); 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:0initSize:15aaa0aaa1aaa2aaa3aaa4aaa5aaa6aaa7aaa8aaa9aaa10aaa11aaa12aaa13aaa14popSize:0
如有疑问,欢迎提出。
我的博客:blog.scarlettbai.com
转载地址:http://xesni.baihongyu.com/