【数据结构与算法】队列(顺序存储)

一.队列的原理

队列也是一种线性结构,只不过是一种受限制的线性结构,只能在其头进行删除,尾进行添加.
因为队列是线性结构,所以我们可以通过顺序表来实现,也可以通过链表来实现,本篇我们先以顺序表来实现.
只要我们掌握了顺序表,本篇就很简单.
可以联想到我们日常中的排队,先排先办事!

二.队列的结构

首先我们还是先来讲结构,很明显我们需要用到数组,为了我们能够很好的找到数组的头和尾,我们可以定义两个数.
在这里插入图片描述
可能你有点迷糊,没事,我来画个图:
在这里插入图片描述
这个rear是随着添加元素而变化的,指在数组添加元素的后面,不是最大长度的后面.

三.队列初始化

队列的初始化就是一个空数组,frontrear都指向下标0
在这里插入图片描述
画个图就是这样:
在这里插入图片描述
都等于数组下标为0的地方.

四.判断队列是否满或空

1.是否为满

这个判断就会很简单,每当我们添加一个数据时,我们对rear记录的数组下标增加1.
那么如果队列满的话,rear就会和最大长度一样,以此来判断.
在这里插入图片描述

2.是否为空

是否为空也很好判断了,因为我们一开始初始化就是一个空的数组,只需要判断front是否与rear相等即可.,相等即为空
在这里插入图片描述

五.入队操作

顺序表的入队操作就很简单了,相当于为空数组赋值就可以了,只不过我们只能依次添加,因为是队列嘛,只能尾部添加.
所以你知道为什么我们用rear了吧,用这个来当下标,进行数据的添加,每添加一次,就对其+1,后面又接着添加,直到rear等于数组最大长度了就满了,添加不了.
在这里插入图片描述

六.队列的遍历

就跟数组的遍历一样简单的很,一头一尾作为循环的条件.
在这里插入图片描述

七.出队操作

1.前移

跟顺序表一样,乾坤大罗伊,直接将front指向的位置,赋值成为其后面一个的值,最后rear减个1即可.
在这里插入图片描述
传的参数p,只不过是拿取要删除的值.
这里的循环条件要注意,所以的数据要向前移动一步,我们又是从front开始的,所以我们需要对rear-1进行判断,因为下面我们需要后一个也就是i+1这个下标.
如果不对rear减1,会访问越界,导致程序崩溃.

2.后指

既然我们可以通过前移,达到删除元素的效果,那我们将front向后面指一下,那不就达到删除的效果了嘛,我们访问不到.
在这里插入图片描述
但是你不能一直往后面移动,不然就越界了,所以对front做了一个判断.

八.其他小接口

1.获取队列首元素

在这里插入图片描述

2.获取队列长度

在这里插入图片描述

3.清除队列

在这里插入图片描述

酒.总结

其实当你熟悉了顺序表,那么顺序存储的队列很简单,就是数组,只不过我们特殊在头和尾部的操作.

  • 队列是一种先进先出(FIFO)的数据结构。
  • 队列通常具有两个基本操作:入队和出队。
  • 入队操作将元素添加到队列的末尾。
  • 出队操作将队列的第一个元素删除并返回。
  • 队列的底层实现可以使用数组或链表。
  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值