循环队列的实现

class MyQueue:
    """
    头指针front指向队头元素,尾指针rear指向队尾元素的下一个位置
    牺牲一个空间位置用于区分队空队满
    """

    def __init__(self, capacity):
        self.capacity = capacity
        self.data = [None] * self.capacity
        self.front = self.rear = 0

    def isEmpty(self):
        return self.front == self.rear

    def isFull(self):
        # 队尾下标+1
        return (self.rear + 1) % self.capacity == self.front

    def enqueue(self, value):
        """
        入队
        :param value: 要插入的值
        :return:
        """
        if self.isFull():
            raise Exception('队列已经满了!')
        else:
            self.data[self.rear] = value
            self.rear = (self.rear + 1) % self.capacity

    def dequeue(self):
        """
        出队
        :return: 被删除的元素
        """
        if self.isEmpty():
            raise Exception('队列已经空了!')
        else:
            de_queue_element = self.data[self.front]
            self.front = (self.front + 1) % self.capacity
            return de_queue_element

    def output(self):
        i = self.front
        while i != self.rear:
            print(self.data[i])
            i = (i + 1) % self.capacity


m = MyQueue(7)
m.enqueue(3)
m.enqueue(2)
m.enqueue(1)
m.enqueue(7)
m.enqueue(7)
m.enqueue(7)
m.dequeue()
m.dequeue()
m.dequeue()
m.enqueue(66)
m.enqueue(55)
m.enqueue(44)
m.output()
原文地址:https://www.cnblogs.com/hhsh/p/13601260.html