数据结构与算法(九)链队列——队列的链式存储结构

不问归期 提交于 2019-12-21 03:55:21

链队列


队列的链式存储结构,其实就是线性表的单链表,只不过它只能它只能尾进头出而已,我们把它就称之为链队列。

既然链队列和单链表一样,观察链队列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),不过循环队列是实现申请好空间,使用期间不释放,而对于链队列,每次申请和释放结点也会存在也些时间开销,如果入队出队频繁,那么两者还是有细微的差异。
  • 对于空间上来说,循环队列必须有一个固定的长度,所以就有了存储元素个数和空间浪费的问题,而链队列不存在这个问题,尽管它需要一个指针域,会产生一些空间上的开销,但也可以接受,所以空间上链队列更加灵活。

总的来说,在可以确定队列长度最大值的情况下,建议使用循环队列,如果无法预估队列的长度时,则使用链队列。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!