2019-06-11 16:26:24 +08:00
|
|
|
''' mbinary
|
|
|
|
#########################################################################
|
|
|
|
# File : circularQueue.py
|
|
|
|
# Author: mbinary
|
|
|
|
# Mail: zhuheqin1@gmail.com
|
|
|
|
# Blog: https://mbinary.xyz
|
|
|
|
# Github: https://github.com/mbinary
|
|
|
|
# Created Time: 2019-04-16 09:41
|
|
|
|
# Description:
|
|
|
|
#########################################################################
|
|
|
|
'''
|
2020-04-15 12:28:20 +08:00
|
|
|
|
|
|
|
|
2018-12-29 19:30:21 +08:00
|
|
|
class MyCircularQueue:
|
|
|
|
|
|
|
|
def __init__(self, k):
|
|
|
|
"""
|
|
|
|
Initialize your data structure here. Set the size of the queue to be k.
|
|
|
|
:type k: int
|
|
|
|
"""
|
|
|
|
self.size = k+1
|
|
|
|
self.data = [0]*self.size
|
|
|
|
self.head = self.rear = 0
|
|
|
|
|
|
|
|
def enQueue(self, value):
|
|
|
|
"""
|
|
|
|
Insert an element into the circular queue. Return true if the operation is successful.
|
|
|
|
:type value: int
|
|
|
|
:rtype: bool
|
|
|
|
"""
|
|
|
|
if self.isFull():
|
|
|
|
return False
|
|
|
|
self.data[self.rear] = value
|
2020-04-15 12:28:20 +08:00
|
|
|
self.rear = (self.rear+1) % self.size
|
2018-12-29 19:30:21 +08:00
|
|
|
return True
|
2020-04-15 12:28:20 +08:00
|
|
|
|
2018-12-29 19:30:21 +08:00
|
|
|
def deQueue(self):
|
|
|
|
"""
|
|
|
|
Delete an element from the circular queue. Return true if the operation is successful.
|
|
|
|
:rtype: bool
|
|
|
|
"""
|
|
|
|
if self.isEmpty():
|
|
|
|
return False
|
2020-04-15 12:28:20 +08:00
|
|
|
self.head = (self.head+1) % self.size
|
2018-12-29 19:30:21 +08:00
|
|
|
return True
|
2020-04-15 12:28:20 +08:00
|
|
|
|
2018-12-29 19:30:21 +08:00
|
|
|
def Front(self):
|
|
|
|
"""
|
|
|
|
Get the front item from the queue.
|
|
|
|
:rtype: int
|
|
|
|
"""
|
|
|
|
if self.isEmpty():
|
|
|
|
return -1
|
|
|
|
return self.data[self.head]
|
|
|
|
|
|
|
|
def Rear(self):
|
|
|
|
"""
|
|
|
|
Get the last item from the queue.
|
|
|
|
:rtype: int
|
|
|
|
"""
|
|
|
|
if self.isEmpty():
|
|
|
|
return -1
|
2020-04-15 12:28:20 +08:00
|
|
|
return self.data[(self.rear-1) % self.size]
|
2018-12-29 19:30:21 +08:00
|
|
|
|
|
|
|
def isEmpty(self):
|
|
|
|
"""
|
|
|
|
Checks whether the circular queue is empty or not.
|
|
|
|
:rtype: bool
|
|
|
|
"""
|
2020-04-15 12:28:20 +08:00
|
|
|
return self.head == self.rear
|
2018-12-29 19:30:21 +08:00
|
|
|
|
|
|
|
def isFull(self):
|
|
|
|
"""
|
|
|
|
Checks whether the circular queue is full or not.
|
|
|
|
:rtype: bool
|
|
|
|
"""
|
2020-04-15 12:28:20 +08:00
|
|
|
return (self.head - self.rear) % self.size == 1
|
2018-12-29 19:30:21 +08:00
|
|
|
|
|
|
|
|
|
|
|
# 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()
|