数据结构之队列

本文详细介绍了队列这一先进先出(FIFO)数据结构,包括其概念、两种主要实现方式——数组和链表,并探讨了循环数组在实现队列时的满与空状态判断。此外,还提到了队列的接口设计以及静态数组和动态数组实现队列的区别,最后提及链式队列的实现。
摘要由CSDN通过智能技术生成

什么是队列?

队列(queue)是一种先进先出(FIFO)的数据结构。就如生活中排队一样,先排的人在队伍的最前面,后排的人在队伍的最后面。

 

队列的实现方式

队列的实现方式分为数组和链表两种

数组的方式实现队列需要两个指针,指向对头的front,指向队尾的rear。由于队列是对的头部删除,队的尾部插入数据,当我们在删除数据之后,数据并不会自动去补齐前面已经删除的空白的位置,这就导致有的时候整个数组并没有多少元素,但是已经不能插入数据了。从而造成资源的浪费!如果在元素出队的过程中,不断地移动元素,这样复杂所需资源非常大,也是不好的实现方法。这个时候,我们找到了另外一种实现方法:循环数组

如下图所示,就是典型的循环数组的样子。左边为空循环队列,右边为满循环队列。但是我们仅仅用rear==front是无法判断这个队列是否是满还是空的,一般我们有两种方法,第一种是引入一个新变量,来记录队列元素的个数,插入元素加1,删除元素减1,清空队列就置0;另外一种就是定义“满”的含义,在数组中定义一个元素始终不使用,当队列满的时候,front和rear的值就不可能相同了。

 

当我们采用第二种方法时,我们让rear比front小1,这样就可以解决问题了。

当满足下面条件时,队列为空:(rear+1)%QUEUE_SIZE== front

当满足下面条件时,队列为满:(rear+2)%QUEUE_SIZE== front

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值