thiagowfx's avatar

Β¬ just serendipity πŸ€ (not just serendipity)

LeetCode #622: Design Circular Queue

β€’ 193 words β€’ 1 min

LeetCode #622: Design Circular Queue:

python
class MyCircularQueue:

    def __init__(self, k: int):
        self.q = [None] * k
        self.k = k

        self.start = 0
        self.end = 0
        self.count = 0

    ## -- queue

    ## .   .  .
    ## se

    ## 1   .  .
    ## s      e

    ## 1   .  2
    ## s   e

    ## --  dequeue

    ## 1 . 2
    ## s e

    ## . . 2
    ##   e s

    def enQueue(self, value: int) -> bool:
        if self.isFull():
            return False

        self.q[self.end] = value
        self.end = (self.end - 1) % self.k
        self.count += 1
        return True


    def deQueue(self) -> bool:
        if self.isEmpty():
            return False

        self.start = (self.start - 1) % self.k
        self.count -= 1
        return True


    def Front(self) -> int:
        if self.isEmpty():
            return -1

        return self.q[self.start]


    def Rear(self) -> int:
        if self.isEmpty():
            return -1

        return self.q[(self.end + 1) % self.k]


    def isEmpty(self) -> bool:
        return self.count == 0


    def isFull(self) -> bool:
        return self.count == self.k


# 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()