谁能告诉我我的dequeue函数出了什么问题,它运行后不会从队列或输出中删除任何东西。

1 人关注

使用命令式编程实现一个队列,我试着引入了一个dequeue函数,但它没有工作,请检查错误。

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
    
1 个评论
你为什么要实施这个?
python
python-3.x
module
queue
abstraction
Kesley Nate Gwangwanya
Kesley Nate Gwangwanya
发布于 2022-09-16
2 个回答
Lucas M. Uriarte
Lucas M. Uriarte
发布于 2022-09-16
已采纳
0 人赞同

我认为在已经存在deque对象的情况下,实现这个目标是没有意义的。 除了作为一种练习。

from collections import deque
queue = [index for index in range(0, 10)]
my_deque = deque(queue)

现在你可以使用popleft和pop来取消queue

print(queue)
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for _ in range(3):
    out = my_deque.popleft()
    print(out)
for _ in range(3):
    out = my_deque.pop()
    print(out)

如果你想自己实现这一点,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]
    
这实际上是一个高中作业,教学大纲说我们应该能够在不使用任何库的情况下自己制作,这就是为什么我试着制作那个函数,谢谢你的最终答案。
而且我也不能使用list.append()方法和pop方法。
好了,现在我得到了更多你的答案。如果你有任何问题,请告诉我。如果没有,你可以接受这个答案,因为它是有效的
Sparkling Marcel
Sparkling Marcel
发布于 2022-09-16
0 人赞同