1.基础的节点对象Node public class Node { private Object data;// 存放值 private Node next;// 下一个节点
public Node(){}
public Node(Object data) {// 构造值为data的结点 this(data,null); } public Node(Object data, Node next) { this.data = data; this.next = next; } public Object getData() { return data; } public void setData(Object data) { this.data = data; } public Node getNext() { return next; } public void setNext(Node next) { this.next = next; } }
2.Queue操作接口
public interface IQueue {
public void clear(); // 将一个已经存在的队列置成空 public boolean isEmpty(); // 测试队列是否为空 public int length();// 求队列中的数据元素个数并由函数返回其值 public Object peek();// 查看队列的头而不移除它,返回队列顶对象,如果此队列为空,则返回 null public Object poll();// 移除队列的头并作为此函数的值返回该对象,如果此队列为空,则返回 null public void offer(Object o) throws Exception;// 把指定的元素插入队列 public void display();// 打印函数,打印所有队列中的元素(队列头到队列尾)
}
3.链队列类(FIFO)
public class LinkQueue implements IQueue{ private Node front;// 队头的引用 private Node rear;// 队尾的引用,指向队尾元素
public LinkQueue() { this.front=null; this.rear=null; }
4.循环顺序队列 public class CircleSqQueue implements IQueue { private Object[] queueElem; // 队列存储空间 private int front;// 队首的引用,若队列不空,指向队首元素 private int rear;// 队尾的引用,若队列不空,指向队尾元素的下一个位置
// 循环队列类的构造函数 public CircleSqQueue(int maxSize) { front=rear=0;// 队头、队尾初始化为0 queueElem = new Object[maxSize];// 为队列分配maxSize个存储单元 }
// 将一个已经存在的队列置成空 public void clear() { front = rear = 0; } // 测试队列是否为空 public boolean isEmpty() { return front == rear; }
// 求队列中的数据元素个数并由函数返回其值 public int length() { return (rear - front + queueElem.length) % queueElem.length; }