当前位置: 首页 > 后端技术 > Python

LeetCode622-DesignCircularQueue设计CircularQueue

时间:2023-03-25 20:39:03 Python

LeetCode622:DesignCircularQueue设计CircularQueue首先看队列的数据结构:队列:先进先出数据结构在FIFO数据结构中,第一个处理被添加到队列中的第一个元素。如上图所示,队列是一个典型的FIFO数据结构。插入操作也称为入队,新元素总是添加到队尾。删除操作也称为出队。您只能删除第一个元素。队列-实现为了实现一个队列,我们??可以使用一个动态数组和一个指向队列头部的索引。如上所述,队列应该支持两种操作:入队和出队。Enqueue将一个新元素添加到队列中,而dequeue删除第一个元素。所以我们需要一个索引来指向起点。循环队列之前,我们提供了一个简单但低效的队列实现。一种更有效的方法是使用循环队列。具体来说,我们可以使用一个固定大小的数组和两个指针来指示开始和结束位置。目的是重用我们前面提到的浪费存储。让我们看看循环队列如何使用示例。您应该注意我们在入队或出队时使用的策略。[外部链接图像传输失败(img-ScULOtla-1564547660610)(queue.gif)]仔细检查动画以找到我们用来检查队列是空还是满的策略。以上内容来自力口中国,内容有所改动。标题:设计循环队列:设计循环队列实现。循环队列是一种线性数据结构,其操作行为基于FIFO(先进先出)原则,队列的尾部连接在队列的头部之后形成循环。它也被称为“环形缓冲区”。循环队列的一个好处是我们可以利用这个队列上以前使用过的空间。在普通队列中,一旦队列满了,我们就不能插入下一个元素,即使队列的前面还有空间。但是有了循环队列,我们??可以使用这个空间来存储新值。您的实现应支持以下操作:MyCircularQueue(k):构造函数,将队列长度设置为k。Front:从队列的前面获取元素。如果队列为空,则返回-1。Rear:获取队列尾部的元素。如果队列为空,则返回-1。enQueue(value):向循环队列中插入一个元素。如果插入成功则返回true。deQueue():从循环队列中移除一个元素。如果删除成功则返回真。isEmpty():检查循环队列是否为空。isFull():检查循环队列是否已满。示例:MyCircularQueuecircularQueue=newMycircularQueue(3);//设置长度为3circularQueue.enQueue(1);//返回truecircularQueue.enQueue(2);//返回truecircularQueue.enQueue(3);//返回truecircularQueue.enQueue(4);//返回false,队列已满circularQueue.Rear();//返回3circularQueue.isFull();//返回truecircularQueue.deQueue();//返回truecircularQueue.enQueue(4);//返回truecircularQueue。后部();//返回4个提示:所有值都在0到1000范围内;操作数将在1到1000的范围内;请不要使用内置队列库。解题思路:一般高级编程语言都有内置的队列库,稍微参考一下即可。在循环队列中,我们使用一个数组和两个指针(头和尾)。head表示队列的起始位置,tail表示队列的结束位置。类MyCircularQueue{私有int[]数据;私有int头;私人尾巴;私有整数大小;/**初始化数据结构并指定队列大小k*/publicMyCircularQueue(intk){data=newint[k];头=-1;尾巴=-1;大小=k;}/**在队列中插入一个元素,并返回是否插入成功*/publicbooleanenQueue(intvalue){if(isFull()==true){returnfalse;}if(isEmpty()==true){head=0;}尾巴=(尾巴+1)%大小;数据[尾]=值;返回真;}/**从队列中移除一个项目并返回是否删除成功*/publicbooleandeQueue(){if(isEmpty()==true){returnfalse;}if(head==tail){head=-1;尾巴=-1;返回真;}头=(头+1)%大小;返回真;}/**获取队列中的第一项*/publicintFront(){if(isEmpty()==true){return-1;}返回数据[头];}/**获取队列中的最后一项*/publicintRear(){if(isEmpty()==true){return-1;}返回数据[尾巴];}/**检查队列是否为空*/publicbooleanisEmpty(){returnhead==-1;}/**检查队列是否已满*/publicbooleanisFull(){return((tail+1)%size)==head;}}Python3:classMyCircularQueue():def__init__(self,k:int):"""初始化数据结构并指定队列大小k"""self.size=kself.queue=['']*kself.head=-1self.tail=-1defenQueue(self,value:int)->bool:"""在队列中插入一个项目,返回是否插入成功。"""ifnotself.isFull():ifself.head==-1:self.head=0self.tail=(self.tail+1)%self.sizeself.queue[self.tail]=valuereturnTrueelse:returnFalsedefdeQueue(self)->bool:"""从队列中删除一个项目并返回删除是否成功"""ifnotself.isEmpty():ifself.head==self.tail:self.head,self.tail=-1,-1else:self.head=(self.head+1)%self.sizereturnTrueelse:returnFalsedefFront(self)->int:"""获取队列中的第一项"""ifself.isEmpty():return-1else:returnself.queue[self.head]defRear(self)->int:"""获取队列中的最后一项"""ifself.isEmpty():return-1else:returnself.queue[self.tail]defisEmpty(self)->bool:"""检查队列是否为空"""returnself.head==-1andself.tail==-1defisFull(self)->bool:"""检查队列是否已满"""return(self.tail+1)%self.size==self.head