Python:CircularQueue从Queu的开始到结束打印项目

2024-04-24 11:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在python中实现循环队列,并尝试实现str(self),它打印从队列开始到结束。什么时候我打印出列表,但它没有给出队列中的全部项目列表。在

我正在拼接自身项目从前面一直到最后。在

class CircularQueue:
    def __init__(self,capacity):

        self.items =[None]*capacity
        self.MAX_QUEUE = capacity
        self.front = 0
        self.back = self.MAX_QUEUE - 1
        self.count = 0

    def is_full(self):
        return self.count == self.MAX_QUEUE

    def is_empty(self):
        return self.count == 0

    def enqueue(self,item):
            if not self.is_full():
                self.back = (self.back+1)%self.MAX_QUEUE
                self.items[self.back] = item
                self.count +=1
            else:
               raise IndexError("The queue is full.")
    def dequeue(self):
            if not self.is_empty():
                item = self.items[self.front]
                self.front =(self.front+1)% self.MAX_QUEUE
                self.count -=1
                return item
            else:
                raise IndexError("The queue is empty.")

    def peek(self):
        if not self.is_empty():
            item = self.items[self.front]
            return item
        else:
            raise IndexError("The queue is empty.")
    def __str__(self):
        my_list = []
        for i in self.items[self.front:]:
            my_list.append(i)
        return str(my_list)


q = CircularQueue(8)
q.enqueue(5)
q.enqueue(2)
q.enqueue(1)
q.enqueue(7)
q.enqueue(9)
q.dequeue()
q.dequeue()
q.dequeue()
q.dequeue()
q.dequeue()
q.enqueue(2)
q.enqueue(4)
q.enqueue(1)
q.enqueue(7)
q.enqueue(6)
q.enqueue(3)
print(q)

Expected result:
[2, 4, 1, 7, 6, 3]
Got:
[2,4,1]

Tags: selfreturn队列queueisdefcountback
1条回答
网友
1楼 · 发布于 2024-04-24 11:30:42

看起来您的问题是,您只将循环数组的front中的元素添加到底层列表实现的末尾。您真正想做的是从front复制到结尾,然后从开始复制到{}。在

这给了我正确的输出

def __str__(self):
    my_list = []
    for i in self.items[self.front:]:
        my_list.append(i)

    for i in self.items[:self.back+1]:
        my_list.append(i)

    return str(my_list)

希望有帮助!另外,您可能需要考虑使用itertools中的cycle。在

相关问题 更多 >