深入学习数据结构之队列(三)

什么是队列?

  队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。

  与栈不同的是队列遵循“先进后出”,即数据从一端插入,另一端弹出。两端分别进行不同的操作。

注:如果将栈和队列结合,即可以实现双向队列,即两端都可以插入,也都可以弹出。本文仅仅针对单向队列描述。

队列的实现方式

  1、数组实现

    1.1 插入元素  

    

 

 

    将rear指针向后移动一个位置,并且将插入的数据放入rear指向地址空间。(如果数组容量不够需要扩容,同栈扩容原理一致)

    1.2 弹出元素

    数组元素弹出的实现方式有两种

    1.2.1 直接移动指针

     

 

     如上图所示,直接将front指针向后移动一位,数组实际没有发生变化。(内存空间浪费,无效空间无法被GC回收)

    1.2.2 数组整体往前移动,删除顶部元素

      

    如上图所示,数组整体向前移动一个位置,front指向位置不变,rear指向位置向前移动一位。(需要频繁的进行数组移动,浪费了性能)

 

  2、链表实现

    2.1 插入元素

    

    如上图所示,通过链表实现队列只需要将元素6的下一个节点指针指向新的元素节点7,同时将rear指向新的节点7即可。(不需要提前申请空间,也不需要向数组一样扩容)

     2.2 弹出元素

  

   如上图所示,链表弹出元素将元素节点1与元素节点2断开,同时将front指向元素节点2。

  3、对比总结

  • 从上面几个实现方案可以看出,链表队列比数据队列具有一定的优势。性能上更加优越,因此在日常开发中推荐使用链表队列实现。

    

 

posted @ 2019-05-08 22:54  阿朗~  阅读(180)  评论(0编辑  收藏  举报