LeetCode循环队列的实现

写了好久终于把逻辑理顺了,删删减减的注释没写多少。不过作为新手还是很欣慰

class MyCircularQueue(object):
    # 设置定义传进来的参数K,也就是队列最大值,然后头指针,尾指针,创建一个内部都为空且最大为K+1的列表
    def __init__(self, k):
        self.queue = [None] * k  # 空列表
        self.maxsize = k + 1  # 最大值
        self.head = 0  # 头指针
        self.tial = 0  # 尾指针
        self.tag = 0  # 添加标识符,判断队列空满状态

    def enQueue(self, value):
        # 判断列表空满状态,不满就进行插入,并让头指针为0,尾指针向下移动一位
        if (self.isFull() == -1):
            # print('列表满')
            self.tag = 1
            return
        if (self.isEmpty() == True):
            # print('列表为空')
            self.queue[self.tial] = value
            self.tial = (self.tial + 1) % self.maxsize
            self.tag = 1
            return

        self.queue[self.tial] = value
        self.tial = (self.tial + 1) % self.maxsize
        self.tag = 1

    def deQueue(self):
        # 判断列表是否为空
        if (self.isEmpty() == True):
            print('队列为空,无法判定!')
            self.tag = 0
            return
        data = self.queue[self.head] # 保留的火种,可能有用
        self.queue[self.head] = None
        self.head = (self.head + 1) % self.maxsize
        if self.head == self.tial:
            self.tag = 0
            return


    def Front(self):
        # 判断列表是否为空
        if (self.isEmpty() == True):
            print('队列为空,没法取出来!')
            self.tag = 0
            return -1
        else:
            data = self.queue[self.head]
            self.queue[self.head] = None
            self.head = (self.head + 1) % self.maxsize
            self.tag = 1
            if self.head != self.tial:
                return data
            else:
                self.tag = 0
                return '队列空'

    def Rear(self):
        # 判断列表是否为空
        if (self.isFull() == 0):
            print('队列为空,没法取出来!')
            return -1
        else:
            data = self.queue[self.tial - 1]
            self.queue[self.tial - 1] = None
            self.tial = (self.tial - 1) % self.maxsize
            return data

    def isFull(self):
        if (self.tag == 1) and ((self.tial + 1) % self.maxsize == self.head):
            # print('队列为满')
            return -1
        else:
            # print('队列非满')
            return 1

    def isEmpty(self):
        if (self.tag == 0) and (self.tial == self.head):
            return True


obj = MyCircularQueue(4)

# param_1 = obj.enQueue(1)
for i in range(4):
    obj.enQueue(i)
print(obj.queue)

# param_2 = obj.deQueue()
for i in range(4):
    obj.deQueue()
print(obj.queue)

# param_3 = obj.Front()
print(obj.Front())

# param_4 = obj.Rear()
print(obj.Rear())

# param_5 = obj.isEmpty()
# print(obj.isEmpty())
# param_6 = obj.isFull()
# print(obj.isFull())

猜你喜欢

转载自blog.csdn.net/qq_43262631/article/details/85260500