队列

文章目录

  • 队列
    • 顺序队列
    • 循环队列

队列

定义:队列是一种特殊的线性表,只能在队头进行删除操作,在队尾进行插入操作,是一种受限制的线性表

  • 先进先出原则
  • 存储方式分为数组存储和链式存储

顺序队列

队列_第1张图片

  • 顺序队列需要一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear

  • 当队头等于队尾相等时,队列为空

  • 队列插入元素,队尾加1。队列删除,队头加1

      现象:会出现删除的空间不能用的情况,就像c图0空间不能用了,为了实现空间能够循环使用我们提出了循环队列
    

循环队列

队列_第2张图片

  • rear和frontr指针增1 时超出了所分配的队列空间时,就让他指向连续空间的起始位置。rear和front从0-0循环使用,避免了空间的浪费,实际中我们多使用的是循环队列

  • 上图队列装载元素会出现0(空队列)、1、2、3、4、5、6(满队列)共7中情况.,队列装载元素情况为 N+1(n是队列大小)。。无法用N中状态处理N+1中情况

      现象:当rear = front 时,我们无法断定队列是空队列还是满队列属于两种情况
    

    解决方法:

    • 增加额外元素:

      • 例如增加一个 Size 来记录当前队列元素个数,添加一个元素 Size 加1 ,删除一个元素 Size 减 1,根据 Size 判断元素个数从而判断是为空队列还是满队列
      • 用 Tag 来标识插入和删除,假设1为插入,0为删除,看最后一个操作之后是删除还是删除,当 Tag 为1就是满队列
    • 使用 n - 1个顺序空间,是满队列不存在


你可能感兴趣的:(数据结构)