Queue队列
1:队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加、头部删除(先进队列的元素先出队列),跟我们生活中的排队类似。
2:常见的队列分为:单队列和循环队列。 其中单队列,是常见的队列,每次添加元素时,都是添加到对尾,保持头部删除,尾部添加特征。循环队列就是对尾满了,就再从头开始,也就是头尾相连,这就是循环队列。
3:队列的数据存储结构可以是 :数组 也可以是 链表。
下面我们从 队列的 uml类图,常见的队列,队列基本操作来分析下 Queue
通过链表实现队列功能
我们为这个队列设置一个Node类型的头结点head,这个头结点并不放数据,仅仅存一个指针,这样会更便于后面的插入和删除操作。然后再定义一个Node型的结点cur来表示当前结点,以及定义一个int 型的size记录队列的长度。
# Node
public class Node<T> {
// 定义 下一个节点
private Node nextNode;
// 定义当前节点数据
private T curData;
}
# LinkedListQueue
public class LinkedListQueue<E> implements Queue<E> {
// 定义队列的 头部 节点
public Node head;
// 定义队列的 尾部 节点
public Node tail;
// 队列的长度
public int size;
@Override
public boolean isEmpty () {
return (size == 0);
}
@Override
public int getSize() {
return zise;
}
// 入队
@Override
public void enqueue (E e) {
Node node = new Node(e);
if (size == 0){
head = node;
tail = node;
} else {
tail.next = node;
tail = tail.next;
}
size++;
}
// 出对
@Override
public E dequeue() {
if (size == 0) {
throw new IllegalArgumentException("队列为空,无法出队")
}
Node ret = head;
head = head.next;
ret.next = null;
if (head == null) {
tail = null;
}
size--;
return (E) ret.e;
}
// 获取头部节点
@Override
public E getFront() {
return (E)head.e;
}
}