python - 有没有办法在删除项目后输出队列的内容?
问题描述
我正在为队列(特别是线性队列)编写代码,并且正在尝试从队列中删除一个项目。删除一个项目后输出队列时,队列中的内容没有改变,所有项目都还在。有没有办法解决这个问题?
我尝试在删除每个项目后打印出队列,但输出仍然没有改变。
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()
将“牛奶”、“糖”和“鸡蛋”添加到队列中。删除一个项目应该删除“牛奶”,打印队列应该输出“糖”和“鸡蛋”,但实际输出仍然是“牛奶”、“糖”和“鸡蛋”。
解决方案
这里的问题不是你的打印,而是你的队列。看你的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
and中只有 3 个元素self.head == 5
怎么办?你会得到一个错误),做
data = self.queue.pop(0)
它从中删除第一个元素self.queue
并将其返回。由于enqueue()
您将添加到列表的末尾并且dequeue()
您将从列表的开头删除,因此它是一个有效的队列。
推荐阅读
- c++ - 如何修复“类模板的参数列表丢失”之类的错误消息?
- python - 安装 pysqlcipher3 的问题
- c++ - 当两种类型相同时,专门化一个 c++ 模板函数
- scala - 特质,类和案例类/对象之间的编译顺序是什么
- javascript - 在 Node 项目中添加多个 BigQuery JSON 凭据文件
- c# - 使用 Automapper 将模型传递给 ViewModel
- python - 我正在尝试扫描提供的文件,并将 1 添加到每个“A”的列表中
- c# - 在 Windows 10 uwp 中获取通知来源?
- html - 将整个 div 覆盖到仅具有 flexbox 的容器
- c# - 将 ModelExpression 从 Tag Helper 传递到局部视图