本文的代码来自于《数据结构与算法(JAVA语言版)》,是笔者在网上找到的资料,非正式出刊版物。笔者对代码一些比较难以理解的部分添加了注释和图解,欢迎大家来讨论。
public class QueueSLinked implements Queue {
private SLNode front;//frontz指向第一个元素前面一个位置
private SLNode rear;//rear指向最后一个元素位置
private int size;
public QueueSLinked() {
front = new SLNode();
rear = front;
size = 0;
}
public int getSize() {
return size;
}//返回队列的大小
public boolean isEmpty() {
return size==0;
}//判断队列是否为空
public void enqueue(Object e) {
SLNode p = new SLNode(e,null);
rear.setNext(p);
rear = p;
size++;
}//数据元素e入队
public Object dequeue() throws QueueEmptyException {
if (size<1)
throw new QueueEmptyException("错误:队列为空");
SLNode p = front.getNext();
front.setNext(p.getNext());
size--;
if (size<1) rear = front; //如果队列为空,rear指向头结点
return p.getData();
}//队首元素出队
public Object peek() throws QueueEmptyException {
if (size<1)
throw new QueueEmptyException("错误:队列为空");
return front.getNext().getData();
}//取队首元素
}
public interface Queue {
//返回队列的大小
public int getSize();
//判断队列是否为空
public boolean isEmpty();
//数据元素e入队
public void enqueue(Object e);
//队首元素出队
public Object dequeue() throws QueueEmptyException;
//取队首元素
public Object peek() throws QueueEmptyException;
}
public class QueueEmptyException extends RuntimeException {
public QueueEmptyException(String err) {
super(err);
}
}
public class SLNode implements Node {
private Object element;
private SLNode next;
public SLNode() {
this(null,null);
}
public SLNode(Object ele, SLNode next){
this.element = ele;
this.next = next;
}
public SLNode getNext(){
return next;
}
public void setNext(SLNode next){
this.next = next;
}
/****************Node Interface Method**************/
public Object getData() {
return element;
}
public void setData(Object obj) {
element = obj;
}
}
public interface Node {
//获取结点数据域
public Object getData();
//设置结点数据域
public void setData(Object obj);
}