队列元素(节点)类:
package com.qimh.queue;
public class Node {//T 表示使用的是泛型
// 存储的数据
private T data;
// 下一个节点的引用
private Node next;
public Node(T data) {
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
队列类:
package com.qimh.queue;
public class LinkQueue {
// 队头
private Node front;
// 队尾
private Node rear;
// 元素个数
private int size;
/**
* 创建队列
*/
public LinkQueue() {
rear = front = null;
}
/**
* 入队列
*
* @param data
*/
public void enQueue(T data) {
Node node = new Node(data);
if (isEmputy()) {
front = rear = node;
} else {
rear.setNext(node);
rear = node;
}
size++;
}
/**
* 出队列
*
* @return 返回数据
*/
public T deQueue() {
if (isEmputy()) {
throw new RuntimeException("队列为空");
}
Node delete = front;
front = delete.getNext();
delete.setNext(null);; // help GC
size--;
if (size == 0) {
// 删除掉最后一个元素时,front值已经为null,但rear还是指向该节点,需要将rear置为null
// 最后一个结点front和rear两个引用都没指向它,帮助GC处理该节点对象
rear = front;
}
return (T) delete.getData();
}
/**
* 判断队列是否为空
* @return
*/
public boolean isEmputy() {
return (front == null && rear == null) ? true : false;
}
/**
* 获取队列的元素个数
* @return
*/
public int size() {
return this.size;
}
}
队列测试类:
package com.qimh.queue;
public class Main {
public static void main(String[] args) {
LinkQueue queue = new LinkQueue();
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.enQueue(4);
System.out.println("size:" + queue.size());
for (int i = 0; i < 4; i++) {
System.out.println("出队列:" + queue.deQueue());
}
// System.out.println("出队列:" + queue.deQueue());
// System.out.println("出队列:" + queue.deQueue());
// System.out.println("出队列:" + queue.deQueue());
// System.out.println("出队列:" + queue.deQueue());
System.out.println("删完重新添加==============");
queue.enQueue(11);
queue.enQueue(22);
queue.enQueue(33);
queue.enQueue(44);
System.out.println("size:" + queue.size());
System.out.println("出队列:" + queue.deQueue());
System.out.println("出队列:" + queue.deQueue());
System.out.println("出队列:" + queue.deQueue());
System.out.println("出队列:" + queue.deQueue());
}
}