我是靠谱客的博主 干净紫菜,最近开发中收集的这篇文章主要介绍数据结构与算法---动态数组(3)顺序队列ArrayQueue、循环队列ArrayQueueLoop,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 队列的顺序存储结构
    队列的定义:队列是只允许在一端经行插入操作,而在另一端进行删除操作的线性表
    队列是一种先进先出的线性表,允许插入的一端称为队尾,允许删除的一端称为队头
    在这里插入图片描述

  2. 队列的接口定义
    在这里插入图片描述

  3. 接口的实现 –基于ArrayList实现在这里插入图片描述在这里插入图片描述在这里插入图片描述但是顺序队列存在一个问题,元素进队时时间复杂度为0(1),元素出队时时间复杂度为0(n)

  4. 循环队列的顺序存储结构
    优化第一步:让队头指针与队尾指针一样随着元素的移动而移动
    在这里插入图片描述在这里插入图片描述 这样子入队和出队的时间复杂度都为0(1)
    优化第二步:当队尾或队头指针到达尾部时,如需后移可重新指向表头
    在这里插入图片描述
    在这里插入图片描述
    这样如何判断队列已满,如何为空?
    队列满的条件(Rear+1)%n==Front; n为数组的长度
    优化第三步:将一个空间预留出来不放任何元素,尾指针始终指向这个null空间
    在这里插入图片描述此时这样就表示队列已满
    在这里插入图片描述队列为空的条件Rear==Front;

  5. 循环队列的实现
    此时就不能在依赖于ArrayList应为他没有front和rear
    我们需要重写他的底层实现
    成员变量
    在这里插入图片描述成员函数
    在这里插入图片描述元素e入队
    1.先看队列是否满了((rear+1)%data.length= =front),则需要扩容
    2.若没满则元素往当前队尾的位置走,然后队尾对数组长度取余再加一
    3.然后size++
    在这里插入图片描述
    元素出队
    1.先判断队列是否为空,若为空则提示队列为空
    2.若不为空,则返回front位置处的元素,此时队头的位置位队头加一在对数组长度取余,size–
    3.若有效元素个数小于等于(数组长度-1)的四分之一,并且(数组长度减一)除二要大于等于10时,则需要缩容
    在这里插入图片描述扩容、缩容
    我们将新建的数组从位置零开始开始放元素,放size个
    原来的数组我们可以定义一个P从front开始,一直走到rear结束,但是P此时还需要对数组长度取余
    如果P==rear,则退出;此时rear就等于size。
    在这里插入图片描述得到队头和队尾元素
    在这里插入图片描述清空队列
    在这里插入图片描述重写
    在这里插入图片描述迭代器
    在这里插入图片描述

最后

以上就是干净紫菜为你收集整理的数据结构与算法---动态数组(3)顺序队列ArrayQueue、循环队列ArrayQueueLoop的全部内容,希望文章能够帮你解决数据结构与算法---动态数组(3)顺序队列ArrayQueue、循环队列ArrayQueueLoop所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部