队列的定义
队列也是一种操作受限的线性数据结构,其中的元素遵循先进先出的原则。队列支持入队enqueue()和出队dequeue()两个操作,入队是在队尾添加元素,出队是在队头取出元素。
队列的实现方式
和栈只需要一个栈顶指针不同,但是队列需要两个指针:一个是 head 指针,指向队头;一个是 tail 指针,指向队尾。
基于数组的顺序队列
和栈分析一样,当数组空间足够时入队和出队的时间复杂度都为O(1),当数组空间不足可以申请更大的空间然后进行数据搬迁对应的时间复杂度为O(n)。

基于链表的链式队列
链式队列的入队和出队时间复杂度都为O(1)。

基于数组的循环队列
上述的基于数组的顺序对列有个问题,随着入队和出队操作会造成数组靠前的空间就浪费了,为了解决这个问题就引入了循环队列。我们将数组的头尾相连就形成了循环队列,对应的入队和出队时间复杂度都为O(1)。
