链队列
队列的链式存储结构,其实就是线性表的单链表,只不过它只能它只能尾进头出而已,我们把它就称之为链队列。
既然链队列和单链表一样,观察链队列LinkedQueue和单链表LinkedList的UML类图,可以看到两者之间是聚合关系,也就说LinkedQueue相当于LinkedList的成员变量,和我们的之前说的链栈是一样的
既然如此,也是创建LinkedList对象list实现,调用list的方法即可,当然LinkedQueue还有实现Queue接口
package DS02.动态链表;
import DS01.动态数组.Queue;
import java.util.Iterator;
public class LinkedQueue<E> implements Queue<E> {
//声明并创建单链表对象
private LinkedList<E> list;
public LinkedQueue() {
list = new LinkedList<>();
}
@Override
public int getSize() {
return list.getSize();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public void enqueue(E e) {
list.addLast(e);
}
@Override
public E dequeue() {
return list.removeFirst();
}
@Override
public E getFront() {
return list.getFirst();
}
@Override
public E getRear() {
return list.getLast();
}
@Override
public void clear() {
list.clear();
}
@Override
public Iterator<E> iterator() {
return list.iterator();
}
}
对比循环队列和链队列
对于循环队列和链队列的比较,可以从两方面来考虑:
- 从时间上,其实它们的基本操作都是常数时间,时间复杂度为O(1),不过循环队列是实现申请好空间,使用期间不释放,而对于链队列,每次申请和释放结点也会存在也些时间开销,如果入队出队频繁,那么两者还是有细微的差异。
- 对于空间上来说,循环队列必须有一个固定的长度,所以就有了存储元素个数和空间浪费的问题,而链队列不存在这个问题,尽管它需要一个指针域,会产生一些空间上的开销,但也可以接受,所以空间上链队列更加灵活。
总的来说,在可以确定队列长度最大值的情况下,建议使用循环队列,如果无法预估队列的长度时,则使用链队列。
来源:CSDN
作者:~inspire
链接:https://blog.csdn.net/qq_43624033/article/details/103616754