删除项目后,是否可以输出队列的内容?

时间:2019-06-05 13:29:57

标签: python queue

我正在为队列(尤其是线性队列)编写代码,并且试图从队列中删除项目。删除项目后输出队列时,队列中的内容没有更改,所有项目仍然存在。有什么办法可以解决这个问题?

我尝试在删除每个项目之后打印出队列,但是输出仍然不会改变。

import sys
class Queue:
    def __init__(self):
        self.head = 0
        self.tail = 0
        self.MaxSize = 4 
        self.queue = []

    def size(self):
        return self.tail - self.head

    def enqueue(self,data):
        if self.size() > self.MaxSize:
            return("Queue Full")

        else:
            self.queue.append(data)
            self.tail += 1
            return True

    def dequeue(self):
        if self.size() <= 0:
            self.reset()
            return("Queue Empty")
        data = self.queue[self.head]
        self.head += 1
        return data

    def reset(self):
        self.head = 0
        self.tail = 0
        self.queue = []

q = Queue()
def addOrRemove():
    print("Current Queue Size - ", q.size())
    print()
    addRemove = input("Add(A), Remove(R), End(E), View(V) ")
    addRemove = addRemove.upper()
    while True:
        if addRemove == 'A':
            add = input("Enter input - ")
            q.enqueue(add)
            if q.size() > q.MaxSize:
                print("Queue Full")
            addOrRemove()
        elif addRemove == 'R':
            q.dequeue()
            print(q.queue)
            if q.size() <= 0:
                print("Queue Empty")
                q.reset()
            addOrRemove()
        elif addRemove == 'E':
            sys.exit()
        elif addRemove == 'V':
            print(" ".join(q.queue))
            addOrRemove()
        else:
            print("Invalid input")
            addOrRemove()
            return False
addOrRemove()

将“牛奶”,“糖”和“鸡蛋”添加到队列中。删除项目应删除“牛奶”,并且打印队列应输出“糖”和“蛋”,但实际输出仍然是“牛奶”,“糖”和“蛋”。

1 个答案:

答案 0 :(得分:0)

这里的问题不是您的打印,而是您的队列。查看您的dequeue()方法:

def dequeue(self):
    if self.size() <= 0:
        self.reset()
        return("Queue Empty")
    data = self.queue[self.head]
    self.head += 1
    return data

您丝毫不会从self.queue中删除任何内容,因此当您尝试打印时,它自然不会改变。

这里的解决方案是代替

data = self.queue[self.head]

这本身就是一个逻辑错误(如果self.queueself.head == 5中只有3个元素怎么办?您会得到一个错误)

data = self.queue.pop(0)

从<{1}中删除第一个元素并返回它。由于在self.queue中您将添加到列表的 end 中,而在enqueue()中,您将从列表的开始中删除,这是一个有效的队列。

相关问题