Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在设计循环队列时,将queue.front初始化为-1或0_Python_Queue - Fatal编程技术网

Python 在设计循环队列时,将queue.front初始化为-1或0

Python 在设计循环队列时,将queue.front初始化为-1或0,python,queue,Python,Queue,我正在从这个问题中学习排队 设计循环队列的实现。循环队列是一种线性数据结构,其中操作基于FIFO(先进先出)原理执行,最后一个位置连接回第一个位置以形成一个循环。它也被称为“环形缓冲区” 循环队列的好处之一是我们可以利用队列前面的空间。在普通队列中,一旦队列变满,即使队列前面有一个空间,我们也无法插入下一个元素。但是使用循环队列,我们可以使用该空间来存储新值 您的实现应支持以下操作: MyCircularQueue(k):构造函数,将队列大小设置为k Front:从队列中获取前端项目。如果队列

我正在从这个问题中学习排队

设计循环队列的实现。循环队列是一种线性数据结构,其中操作基于FIFO(先进先出)原理执行,最后一个位置连接回第一个位置以形成一个循环。它也被称为“环形缓冲区”

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

您的实现应支持以下操作:

  • MyCircularQueue(k)
    :构造函数,将队列大小设置为k
  • Front
    :从队列中获取前端项目。如果队列为空,则返回-1
  • Rear
    :从队列中获取最后一项。如果队列为空,则返回-1
  • 排队(值)
    :在循环队列中插入一个元素。如果操作成功,则返回true
  • deQueue()
    :从循环队列中删除元素。如果操作成功,则返回true
  • 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]范围内
  • 请不要使用内置队列库
我模仿古德里奇的教科书,写了一个友好易读的解决方案

1,只有三个数据(_-queue、_-len和_-front)

2,将
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
    逻辑分支
  • 一般来说,我很瘦