簡體   English   中英

誰能告訴我我的 dequeue function 有什么問題,它不會在運行后從隊列或 output 中刪除任何內容

[英]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 的列表中刪除任何項目,這就是為什么它什么都不做

你現在真正要做的就是改變queueLengthfrontPointer值,但永遠不要觸及queue本身

您想要做的只是刪除列表的第一個元素(又名queue

然后將每個項目移動一個位置,因此較早的第二個元素成為第一個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM