设计循环队列问题中 获取队尾元素代码没有看懂具体内容如下
设计循环队列问题中 获取队尾元素代码没有看懂具体内容如下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
获取队尾的元素
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]