码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-08 23:05:35      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:地址   target   指针   元素   因此   描述   栈和队列   双向   内存   

什么是队列?

  队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(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、对比总结

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

    

 

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

标签:地址   target   指针   元素   因此   描述   栈和队列   双向   内存   

原文地址:https://www.cnblogs.com/xiaolangabc/p/10821655.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!