繁体   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