前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计循环队列

设计循环队列

作者头像
Laikee
发布2022-04-25 18:11:06
1630
发布2022-04-25 18:11:06
举报
文章被收录于专栏:Laikee Tech Space

简单记录一下思路: 1, 队列为空状态:head = tail = -1; 2, 入队:如果入队前是空的,则将head 和 tail 都向右移一位,也就是下标为0的地方; 否则只需右移tail 3, 出队:如果出队时队列不为空且为最后一个元素(head == tail),则置head = tail = -1, 否则只需右移head 4, 取队首:只要队不为空,head指向队首元素 5, 取对尾:同理,tail指向队尾元素 6, 判空:见1 7, 判满:tail右移发现与head重合了,则没有地方放入新的元素了,此时为满

代码语言:javascript
复制
class MyCircularQueue:

    def __init__(self, k: int):
        self.head, self.tail = -1, -1
        self.list = {}
        self.size = k
    def enQueue(self, value: int) -> bool:
        if self.isEmpty():
            self.head = 0
            self.tail = 0
            self.list[self.tail] = value
            return True
        if self.isFull():
            return False
        self.tail = (self.tail+1) % self.size
        self.list[self.tail] = value
        return True
    def deQueue(self) -> bool:
        if self.isEmpty():
            return False
        if self.head == self.tail:
            self.head = -1
            self.tail = -1
            return True
        self.head = (self.head+1) % self.size
        return True

    def Front(self) -> int:
        if self.isEmpty():
            return -1
        return self.list[self.head]

    def Rear(self) -> int:
        if self.isEmpty():
            return -1
        return self.list[self.tail]

    def isEmpty(self) -> bool:
        if self.tail == self.head and self.head == -1:
            return True
        return False

    def isFull(self) -> bool:
        if (self.tail+1) % self.size == self.head:
            return True
        return False


# Your MyCircularQueue object will be instantiated and called as such:
# obj = MyCircularQueue(k)
# param_1 = obj.enQueue(value)
# param_2 = obj.deQueue()
# param_3 = obj.Front()
# param_4 = obj.Rear()
# param_5 = obj.isEmpty()
# param_6 = obj.isFull()

又想了下,主要是要约定什么状态是队列为空的,且有两个状态比较特殊: 一个是,队列为空的时候插入的第一个元素(需要同时移动head 和 tail),此时head = tail = 0, 另一个是,队列只有一个元素且要删除的时候(需要同时置head 和 tail 为 -1)

设计循环队列
设计循环队列
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档