[英]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.