购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 实例1
设计循环队列

循环队列是一种线性数据结构,其中的操作是基于FIFO规则执行的,最后一个位置又连接到第一个位置构成一个圆,也称为“环形缓冲区”。

循环队列的好处之一是可以利用队列前面的空间。在普通队列中,一旦队列已满,即使队列前面有空间,也无法插入下一个元素。但是在循环队列中,可以使用前面空间来存储新值。

问题:设计支持以下操作的循环队列。

❑MyCircularQueue(k):构造函数,将队列的大小设置为 k

❑Front():从队列中获取最前面的元素。如果队列为空,则返回-1。

❑Rear():从队列中获取最后一个元素。如果队列为空,则返回-1。

❑enQueue(value):将元素value插入循环队列。如果操作成功,则返回True。

❑deQueue():从循环队列中删除一个元素。如果操作成功,则返回True。

❑isEmpty():检查循环队列是否为空。

❑isFull():检查循环队列是否已满。

思路:定义一个大小为 k 的数组,利用两个指针,一个指向数组的头部,一个指向数组的尾部。如果头尾相同,则队列为空;如果头尾差值等于 k ,那么数组就是满的。插入队列之前,需要检查队列是否为满,如果满的话,则返回False,否则加入队列尾部,同时更新尾部指针。要从队列删除一个元素,首先检查队列是否为空,如果为空的话,则返回False,否则删除队列的头部,同时更新头指针。

代码清单4-4 设计循环队列 HPeIX+UA6alqfrQelQ597m9orQrmYfzgJ+Ybn/YwIR6Hyb62IFdQEOoPp8liaHtU

点击中间区域
呼出菜单
上一章
目录
下一章
×