鱼C论坛

 找回密码
 立即注册
查看: 2727|回复: 1

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

[复制链接]
发表于 2023-2-4 13:27:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
设计循环队列问题中 获取队尾元素代码没有看懂具体内容如下
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 = [0]*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]
        
在获取队尾的元素时为什么不是直接
cur = self.tail
return self.a[cur]
还需要
cur = self.tail
cur -= 1
cur = (cur + self.max_size)%self.max_size
return self.a[cur]

        
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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]

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

cdbf6c81800a19d8116a4d8030fa828ba71e46ce.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 19:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表