Python 在设计循环队列时,将queue.front初始化为-1或0
我正在从这个问题中学习排队 设计循环队列的实现。循环队列是一种线性数据结构,其中操作基于FIFO(先进先出)原理执行,最后一个位置连接回第一个位置以形成一个循环。它也被称为“环形缓冲区” 循环队列的好处之一是我们可以利用队列前面的空间。在普通队列中,一旦队列变满,即使队列前面有一个空间,我们也无法插入下一个元素。但是使用循环队列,我们可以使用该空间来存储新值 您的实现应支持以下操作:Python 在设计循环队列时,将queue.front初始化为-1或0,python,queue,Python,Queue,我正在从这个问题中学习排队 设计循环队列的实现。循环队列是一种线性数据结构,其中操作基于FIFO(先进先出)原理执行,最后一个位置连接回第一个位置以形成一个循环。它也被称为“环形缓冲区” 循环队列的好处之一是我们可以利用队列前面的空间。在普通队列中,一旦队列变满,即使队列前面有一个空间,我们也无法插入下一个元素。但是使用循环队列,我们可以使用该空间来存储新值 您的实现应支持以下操作: MyCircularQueue(k):构造函数,将队列大小设置为k Front:从队列中获取前端项目。如果队列
:构造函数,将队列大小设置为kMyCircularQueue(k)
:从队列中获取前端项目。如果队列为空,则返回-1Front
:从队列中获取最后一项。如果队列为空,则返回-1Rear
:在循环队列中插入一个元素。如果操作成功,则返回true排队(值)
:从循环队列中删除元素。如果操作成功,则返回truedeQueue()
:检查循环队列是否为空isEmpty()
:检查循环队列是否已满isFull()
MyCircularQueue circularQueue = new MyCircularQueue(3); // set the size to be 3
circularQueue.enQueue(1); // return true
circularQueue.enQueue(2); // return true
circularQueue.enQueue(3); // return true
circularQueue.enQueue(4); // return false, the queue is full
circularQueue.Rear(); // return 3
circularQueue.isFull(); // return true
circularQueue.deQueue(); // return true
circularQueue.enQueue(4); // return true
circularQueue.Rear(); // return 4
注意:
MyCircularQueue circularQueue = new MyCircularQueue(3); // set the size to be 3
circularQueue.enQueue(1); // return true
circularQueue.enQueue(2); // return true
circularQueue.enQueue(3); // return true
circularQueue.enQueue(4); // return false, the queue is full
circularQueue.Rear(); // return 3
circularQueue.isFull(); // return true
circularQueue.deQueue(); // return true
circularQueue.enQueue(4); // return true
circularQueue.Rear(); // return 4
- 所有值都将在[0,1000]范围内
- 操作数将在[11000]范围内
- 请不要使用内置队列库
self.\u front
初始化为0
类MyCircularQueue:
#运行时间:76毫秒,比53.17%快
#内存使用率:13.6 MB,低于7.24%
定义初始化(self,k:int):
"""
在此处初始化数据结构。将队列大小设置为k。
"""
self._queue=[None]*k#基本
自身容量=k
自我评价。_len=0
#前三个分类为一组,第四个分类为第二组
自前=0
#因为后=前+长度-1,所以不需要自后
def排队(self,值:int)->bool:
"""
将元素插入循环队列。如果操作成功,则返回true。
"""
if self.isFull():返回False
有效性=(自身前+自身长度)%(自身容量)
self.\u队列[avail]=值
自组长度+=1
返回真值
def出列(自)->bool:
"""
从循环队列中删除元素。如果操作成功,则返回true。
"""
如果self.isEmpty():
返回错误
self._queue[self._front]=None#覆盖当前节点
自前=(自前+1)%自前容量
自我评价.\u len-=1
返回真值
def前(自)->int:
"""
从队列中获取前面的项目。
"""
如果不是self.isEmpty():
返回self.\u队列[self.\u前端]
其他:
返回-1
def后(自)->int:
"""
从队列中获取最后一项。
"""
如果不是self.isEmpty():
_后=(自前+自透镜-1)%self.\u容量
返回自队列[_后方]
其他:
返回-1
def isEmpty(self)->bool:
"""
检查循环队列是否为空。
"""
返回self.\u len==0
def已满(自)->bool:
"""
检查循环队列是否已满。
"""
返回self.\u len==self.\u容量
古德里奇的设计是非常好的阅读与较少的努力
然而,在阅读其他提交文件时,通常的做法是将self.\u fornt
和self.\u rear
初始化为-1
,尽管读或写起来很费力
摘录一个性能优于98%的案例
def出列(自):
"""
从循环队列中删除元素。如果操作成功,则返回true。
:rtype:bool
"""
如果self.isEmpty():
返回错误
self.head=(self.head+1)%self.maxlen
self.curren-=1
如果self.isEmpty():#必须照顾self.head和self.tail
self.head=-1
self.tail=-1
#另一个初始化前后的提交=-1
def排队(self,值:'int')->'bool':
"""
将元素插入循环队列。如果操作成功,则返回true。
"""
if(self.len==self.capacity):返回False
#检查是否已满
#如果(self.rear==self.front-1或(self.rear==self.capacity-1和self.front==0))
如果(self.front==-1):
自前、自后=0,0
elif(self.rear==self.capacity-1和self.front!=0):
#后起动(从起动位置拆下元件时的情况)
self.rear=0
其他:
self.rear=(self.rear+1)%self.capacity
self.data[self.rear]=值
self.len+=1
返回真值
由于python隐藏了大部分实现细节
将
前部
或后部
作为-1
的优点是什么?我总结了常见解决方案和您的解决方案之间的主要区别:
rear
指针标记尾部前部
和后部
设置为-1
if
else
逻辑分支