Java队列

队列的链式存储实现

使用单向链表来实现队列;

把链表的头部作为队首, 把链表的尾部作为队尾。

package com.wkcto.chapter02.queue;
/**
 * 队列的链式存储
 * @author 蛙课网
 *
 */
public class MyLinkQueue {
	private Node  front;		//队首
	private Node  rear;			//队尾
	private int size;			//元素的个数
	
	//返回元素的个数
	public int getSize() {
		return size;
	}
	//判断队列是否为空
	public boolean isEmpty() {
		return size == 0;
	}
	//入队
	public void enQueue(Object e) {
		//根据添加的元素生成一个结点
		Node newNode = new Node(e, null);
		//把结点连接到队列中
		if ( rear == null ) {
			//这是添加的第一个元素,即是头结点也是尾结点
			rear = newNode;
			front = newNode;
		}else {
			//把结点链拉到队列的尾部
			rear.next = newNode;
			rear = newNode ;		//rear指针指向新添加的元素
		}
		size++;			//元素个数加1
	}
	//出队
	public Object deQueue() {
		//判断队列是否为空
		if (size <= 0 ) {
			throw new QueueEmptyException("队列为空");
		}
		Object old = front.element ;
		front = front.next ;	 		//调整队首指针 
		//如果出队后,队列为空, 调整尾指针 
		if (front == null) {
			rear = null;
		}
		size--;
		return  old;
	}
	//返回队首元素
	public Object peek() {
		if (size <= 0 ) {
			throw new QueueEmptyException("队列为空");
		}
		return  front.element;
	}
	
	//通过内部类表示单向链表的结点
	private class Node{
		Object element;
		Node next;
		public Node(Object element, Node next) {
			super();
			this.element = element;
			this.next = next;
		}
		
	}
}