我正在尝试在Python中创建一个循环队列,以便在到达数组中的最后一个元素时返回到头部。我正在研究入队方法,我遇到了一些问题。我正在尝试使用大小为4的数组,并且我能够将值排到第4位,但是当它执行elif语句时,我收到此错误。
TypeError:+:'Node'和'int'
的不支持的操作数类型有什么想法?
class Node(object):
def __init__(self, item = None):
self.item = [None] * 4
self.next = None
self.previous = None
class CircularQueue(object):
def __init__(self):
self.length = 0
self.head = None
self.tail = None
def enqueue(self, x):
newNode = Node(x)
newNode.next = None
if self.head == None:
self.head = newNode
self.tail = newNode
elif self.length < 4:
self.tail.next = newNode
newNode.previous = self.tail
self.tail = newNode
else:
self.tail = (self.tail + 1) % 4
self.length += 1
def dequeue(self):
if self.count == 0:
print ("The Queue is empty!")
self.count -= 1
return self.item.pop()
def size(self):
return self.length
答案 0 :(得分:12)
如果您不必自己实施,可以使用标准库deque
from collections import deque
circular_queue = deque([1,2], maxlen=4)
circular_queue.append(3)
circular_queue.extend([4])
# at this point you have [1,2,3,4]
print(circular_queue.pop()) # [1,2,3] --> 4
# key step. effectively rotate the pointer
circular_queue.rotate(-1) # negative to the left. positive to the right
# at this point you have [2,3,1]
print(circular_queue.pop()) # [2,3] --> 1
答案 1 :(得分:1)
你的问题在这里:
self.tail + 1
但在此之前,您启动了tail作为节点:
self.tail = newNode
因此错误。
答案 2 :(得分:1)
我会尝试指出正确的方向,因为看起来你正在尝试学习如何实现循环队列,并且可能同时学习编程。错误消息试图告诉您变量self.tail是一个对象,并且它不能添加到数字(整数)。
代码行:
self.tail = (self.tail + 1) % 4
是导致错误的问题。但是,在尝试修复这一行之前,需要了解一些核心概念。例如,您不必在Node对象中创建数组。 Self.item可以设置为任何东西。而且似乎可能会混淆循环队列的目的。例如,而不是
self.item = [None] * 4
你可以使用
self.item = item
然后在创建Node对象时,您可以使用以下内容:
mycircularqueue = CircularQueue()
mycircularqueue.enqueue('cat')
mycircularqueue.enqueue('dog')
mycircularqueue.enqueue('mouse')
将三个项目添加到队列中。
答案 3 :(得分:1)
如果你只想让尾巴触及head.e.g。
list = [1,2,3]
list = list + list[0:1]
你会得到:
[1,2,3,1]
也许这是一种简单的方法。