使用单向链表来实现队列;
把链表的头部作为队首, 把链表的尾部作为队尾。
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;
}
}
}