「 数据结构&图文 」使用数组及链表实现队列操作(Queue)

目录

前言

浅聊队列

队列实现

队列的主要方法

介绍

[主要方法]实现思路 - 数组

前言

IsEmpty

IsFull

Enqueue

Dequeue

[主要方法]实现思路 - 链表

「Arrays」使用数组实现顺序队列

「Arrays」使用数组实现循环队列

「LinkedList」使用链表实现链式队列


前言

此文主要是自己学习过程中的记录,如果能帮到大家更好,如有错误望指正

ps:还没写完..

浅聊队列

队列是一种先进先出的线性表

即First Input First Out , 简称:FIFO

简单理解就是去超市买东西结账的时候需要排队,先进队伍的人(先进),先结账出去(先出),后面有其他人想来结账就排在队伍的最末端,等待前面的人结账完成。

例如一台打印机打印东西,先申请打印的就先打印,再想打印什么就排在后面,按顺序依次打印

队列实现

此文代码实现主要使用的是Java语言

同时提供伪代码思路

实现以下三种队列类型:

  • 顺序队列

  • 循环队列

  • 链式队列

主流的队列类型除了以上三种外还有:优先队列...

队列的主要方法

介绍

为了实现队列操作,主要围绕四个方法来进行

  • IsEmpty():判断队列是否为空

  • IsFull():判断队列是否已满

  • Enqueue():进入队列,即从队尾插入一个数据

  • Dequeue():离开队列,即从队头移除一个数据

[主要方法]实现思路 - 数组
前言
  • 初始化一个长度为N的数组:A[N]

  • 定义两个变量:front、rear

    • front:用于表示队头的数组下标

    • rear:用于表示队尾的数组下标

  • 从队列中取出元素就是取自:A[front]

  • 往队列中放入元素就是放至:A[rear+1]

IsEmpty

编写数组队列的时候,初始化的队头(front)和队尾(rear)都为-1

(不用纠结为何为-1,而不是都为0,当作一种约定,都为0说明队列中有且仅有一个元素,在下标0的位置)

因此要判断数组队列是否为空,只需要判断 front = -1 && rear = -1 即可

img

IsFull

什么情况下数组队列满了呢,如下图

img

采用循环数组的思想

img

此时可以明显发现,当rear下标+1的时候,如果与front相等,就代表数组已满。

由于数组长度是固定的,因此需要进行取模运算,即:(rear+1) % QueueSize=front

QueueSize:队列数组长度,上述例子中为7

(rear+1)%QueueSize = (6+1)%7 = 0 = front

此时代表数组队列已满

Enqueue

进入队列,考虑三种情况:

  1. 数组队列是否已满 if(IsFull(..)) -- 已满将返回对应的信息 例:Queue is full! ..

  2. 数组队列是否为空 if(IsEmpty(..)) -- 为空将front和rear的下标指针都移到0 例:front ← rear ← 0

  3. 未满未空,遵循队尾进入,如下 👇 即将往下标为0处添加数据 -- rear = (rear + 1) % QueueSize

img

Dequeue

离开队列,也需要考虑三种情况

  1. 数组队列是否为空 IsEmpty -- 为空则无任何数据可以离开队列,返回对应信息 例:Queue is empty ,remove fail

  2. 队头和队尾是否重合 front = rear -- 当队头和队尾重合的时候,说明队列数组中有且仅有一个元素 👇

    img

    有且仅有一个元素的时候,执行移除,需初始化front ← rear ← -1

  3. 不为空且不重合,遵循队头先出 -- front = (front + 1) % QueueSize 👇

    img

「主要方法」实现思路 - 链表

待写..

「Arrays」使用数组实现顺序队列

待写..

「Arrays」使用数组实现循环队列

待写..

「LinkedList」使用链表实现链式队列

待写..

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值