2268194521 发表于 2023-2-4 13:27:38

设计循环队列问题中 获取队尾元素代码没有看懂具体内容如下

设计循环队列问题中 获取队尾元素代码没有看懂具体内容如下
class MyCircularQueue():

    def __init__(self, k):
      """
      Initialize your data structure here. Set the size of the queue to be k.
      :type k: int
      """
      self.a = *k
      self.head = 0
      self.tail = 0
      self.max_size = k
      self.size = 0
      

   
    def Rear(self):
      """
      Get the last item from the queue.
      :rtype: int
      """
      
      if self.size == 0:
            return -1
      cur = self.tail
      cur -= 1
      cur = (cur + self.max_size)%self.max_size
      return self.a
      
在获取队尾的元素时为什么不是直接
cur = self.tail
return self.a
还需要
cur = self.tail
cur -= 1
cur = (cur + self.max_size)%self.max_size
return self.a

      

ba21 发表于 2023-2-4 22:09:39

获取队尾的元素
self.tail == 图片中的rear (表示队尾指针)
获取队尾的元素实际上就是获取self.tail的上一个元素。由于是循环队列,所以还要能过计算 (cur + self.max_size)%self.max_size 使得指针可以循环移动(也就是移动尾后,尾的下一个元素就是头元素)。
例如:假设有10个元素,那么self.max_size=10。如果当前尾位指针已指向最后一个元素,那么self.tail=10(列表索引从0开始,最后1个元素下标为9)
cur = self.tail = 10
      cur -= 1 =9
      cur =(cur + self.max_size)%self.max_size = (9 + 10)%10 =9
return self.a

计算如下从而形成一个循环:
>>> (9 + 10)%10
9
>>> (10 + 10)%10
0
>>> (11 + 10)%10
1
>>> (12 + 10)%10
2

页: [1]
查看完整版本: 设计循环队列问题中 获取队尾元素代码没有看懂具体内容如下