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

什么是队列?

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

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

    

 

转载于:https://www.cnblogs.com/xiaolangabc/p/10821655.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值