Есть ли способ вывести содержимое очереди после удаления элемента? - PullRequest
0 голосов
/ 05 июня 2019

Я просто работаю над написанием кода для очередей (в частности, линейных) и пытаюсь удалить элемент из своей очереди.При выводе очереди после удаления элемента содержимое в очереди не изменилось, и все элементы все еще там.Есть ли способ обойти это?

Я пытался распечатать очередь после того, как каждый элемент был удален, и все равно вывод не изменился.

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 голосов
/ 05 июня 2019

Проблема здесь не в вашей печати, а в вашей очереди.Посмотрите на ваш 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.queue и self.head == 5 есть только 3 элемента? Вы получитеerror), выполните

data = self.queue.pop(0)

, который удаляет первый элемент из self.queue и возвращает его.Поскольку в enqueue() вы добавляете в конец списка, а в dequeue() вы удаляете из начала списка, это действительная очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...