[英]Can anyone tell me what's wrong with my dequeue function, it wont remove anything from the queue or output after running it
使用命令式编程实现队列,我尝试引入出队 function 但它不起作用,请检查错误。
queue = [None for index in range(0, 10)]
rearPointer = -1
frontPointer = 0
queueFull = 10
queueLength = 0
def Dequeue():
global queueLength, frontPointer, Item
if queueLength == 0:
print("Queue is empty, cannot dequeue")
else:
#item = queue[frontPointer]
if frontPointer == (len(queue) - 1):
frontPointer = 0
else:
frontPointer += 1
queueLength -= 1
我认为当已经存在一个双端队列 object 时实现这个是没有意义的。 除了作为练习。
from collections import deque
queue = [index for index in range(0, 10)]
my_deque = deque(queue)
现在您可以使用 popleft 和 pop 出列
print(queue)
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for _ in range(3):
out = my_deque.popleft()
print(out)
>>>
0
1
2
for _ in range(3):
out = my_deque.pop()
print(out)
>>>
9
8
7
如果你想自己实现这个 Sparkling Marcel 是正确的,他的答案是给你你需要的一切。 您的函数应如下所示:
def Dequeueleft(queue, number=1):
if len(queue) == 0:
print("Queue is empty, cannot dequeue")
values = []
for _ in range(number):
val = queue[0]
queue = queue[1:]
values.append(val)
return queue, values
# equivalent fucntion
def Dequeueleft(queue, number=1):
if len(queue) == 0:
print("Queue is empty, cannot dequeue")
values = [val for val in queue[:number]]
return queue[number:], values
output
queue = [index for index in range(0, 10)]
queue, vals = Dequeueleft(queue, 2)
print(queue, vals)
>>> [2, 3, 4, 5, 6, 7, 8, 9] [0, 1]
实际上,您从未从 dequeue function 的列表中删除任何项目,这就是为什么它什么都不做
你现在真正要做的就是改变queueLength
和frontPointer
值,但永远不要触及queue
本身
您想要做的只是删除列表的第一个元素(又名queue
)
然后将每个项目移动一个位置,因此较早的第二个元素成为第一个
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.