队列(queue):是一种特殊的线性表,特殊之处在于它遵从先进先出原则,它只允许在表的前端进行删除操作,而在表的后端进行插入操作,队列和栈一样是一种操作受限制的表,进行插入操作的端称之为队尾,进行删除操作的端称之为队头,队列中没有元素时称之为空队列。向队尾进行插入操作称之为入队,向队头进行删除操作称之为出,队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除(先进先出原则)。
1、初始化(创建)队列
public class QueueLinkedList {
private int size;
private Node head;//头节点
private Node tail;//尾节点
public QueueLinkedList() {
//初始化
size = 0;
head = null;
tail = null;
}
class Node{
public Object data;// 每个节点的数据
public Node next;// 每个节点指向下一个节点的连接
public Node(Object data)
{
this.data = data;
}
}
}
利用构造函数初始化该类,该类的size字段表示队列数量,还有两个字段分别指向队头队尾。
Node为节点类,类中记录了当前节点值和下一个节点的位置。
2、向队尾添加元素
(1)、根据传递进来的值创建节点。
(2)、判断添加的是否是第一个节点,若是则将头节点设置为当前节点,若不是则将当前尾节点的next设置为当前节点。
(3)、在将当前节点设置为尾节点,size自增一。
public void insertTail(Object value) {
Node newNode = new Node(value);
if (size == 0) {
head = newNode;
}
else {
tail.next = newNode;
}
tail = newNode;
size++;
}
3、向队头删除元素
(1)、判断队列是否为空,为空不可删除。
(2)、将头节点设置为头节点的next,size自减一。
(3)、判断删除节点之后队列是否为空,若为空队列将尾节点指向空。
//删除头节点
public Node delectHead() {
if (size != 0) {
head = head.next;
size--;
if (size == 0) {
tail = null;
}
return head;
}
else {
return null;
}
}
4、判断队列是否为空
//判断队列是否为空
public boolean isNull() {
return size == 0;
}
5、打印所有节点信息
//打印
public void printNode() {
if (size > 0) {
Node node = head;
if (size == 1) {
System.out.println("[" + node.data + "]");
return;
}
int item = size;
System.out.print("[");
while (item > 0) {
if (node.next == null) {
System.out.print(node.data + "]");
}
else {
System.out.print(node.data + ",");
}
node = node.next;
item--;
}
}
else {
System.out.println("[]");
}
}