我正在为队列(尤其是线性队列)编写代码,并且试图从队列中删除项目。删除项目后输出队列时,队列中的内容没有更改,所有项目仍然存在。有什么办法可以解决这个问题?
我尝试在删除每个项目之后打印出队列,但是输出仍然不会改变。
import sys
class Queue:
def __init__(self):
self.head = 0
self.tail = 0
self.MaxSize = 4
self.queue = []
def size(self):
return self.tail - self.head
def enqueue(self,data):
if self.size() > self.MaxSize:
return("Queue Full")
else:
self.queue.append(data)
self.tail += 1
return True
def dequeue(self):
if self.size() <= 0:
self.reset()
return("Queue Empty")
data = self.queue[self.head]
self.head += 1
return data
def reset(self):
self.head = 0
self.tail = 0
self.queue = []
q = Queue()
def addOrRemove():
print("Current Queue Size - ", q.size())
print()
addRemove = input("Add(A), Remove(R), End(E), View(V) ")
addRemove = addRemove.upper()
while True:
if addRemove == 'A':
add = input("Enter input - ")
q.enqueue(add)
if q.size() > q.MaxSize:
print("Queue Full")
addOrRemove()
elif addRemove == 'R':
q.dequeue()
print(q.queue)
if q.size() <= 0:
print("Queue Empty")
q.reset()
addOrRemove()
elif addRemove == 'E':
sys.exit()
elif addRemove == 'V':
print(" ".join(q.queue))
addOrRemove()
else:
print("Invalid input")
addOrRemove()
return False
addOrRemove()
将“牛奶”,“糖”和“鸡蛋”添加到队列中。删除项目应删除“牛奶”,并且打印队列应输出“糖”和“蛋”,但实际输出仍然是“牛奶”,“糖”和“蛋”。
答案 0 :(得分:0)
这里的问题不是您的打印,而是您的队列。查看您的dequeue()
方法:
def dequeue(self):
if self.size() <= 0:
self.reset()
return("Queue Empty")
data = self.queue[self.head]
self.head += 1
return data
您丝毫不会从self.queue
中删除任何内容,因此当您尝试打印时,它自然不会改变。
这里的解决方案是代替
data = self.queue[self.head]
这本身就是一个逻辑错误(如果self.queue
和self.head == 5
中只有3个元素怎么办?您会得到一个错误)
data = self.queue.pop(0)
从<{1}中删除第一个元素并返回它。由于在self.queue
中您将添加到列表的 end 中,而在enqueue()
中,您将从列表的开始中删除,这是一个有效的队列。