我尝试在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]
看起来您的问题是,您只将循环数组的}。在
front
中的元素添加到底层列表实现的末尾。您真正想做的是从front
复制到结尾,然后从开始复制到{这给了我正确的输出
希望有帮助!另外,您可能需要考虑使用itertools中的
cycle
。在相关问题 更多 >
编程相关推荐