Моя определенная очередь не печатается должным образом - PullRequest
0 голосов
/ 27 марта 2020

В настоящее время я делаю назначение класса для создания очереди классов, используя связанный список. Мой код выглядит следующим образом:

class Node:
def __init__(self, data):
    self.data = data
    self.next = None
    self.prev = None
class Queue:
def __init__(self):
    self.front = None
    self.rear = None
def enqueue(self, value):
    newNode = Node(value)
    if self.rear is None:
        self.front = newNode
        self.rear = self.front
    else:
        self.rear.next = newNode
        self.rear.next.prev = self.rear
        self.rear = self.rear.next
def dequeue(self):
    if self.front is None:
        return None
    else:
        to_remove = self.front.data
        self.front = self.front.next
        self.front.prev = None
        return to_remove

def printQueue(self):
    print('The elements in the queue are ')
    element = self.front
    while element is not None:
        print(element, end = "")
        element = element.next
myqueue = Queue()
for i in range(21):
   if i % 3 == 0:
      myqueue.enqueue(i)
   elif i % 5 == 0:
      myqueue.dequeue()
myqueue.printQueue()

Но когда я попытался распечатать, он выглядит так:

<__main__.Node object at 0x000001EB465D8048><__main__.Node object at 0x000001EB465D8128><__main__.Node object at 0x000001EB465D8080><__main__.Node object at 0x000001EB465D80F0>

Я искал на inte rnet и пытался изменить свой код но это все еще показывает то же самое. Хотя я не понимаю, почему.

Ответы [ 3 ]

2 голосов
/ 27 марта 2020

Как говорится в комментарии, я тоже модифицировал ваши вопросы. Вы должны напечатать значение объектов, а не сами объекты. Это не ошибка, просто небольшая путаница с вашей стороны.

1 голос
/ 27 марта 2020

Прежде всего, это не ошибка. Ваша функция printQueue выполняет итерацию элементов и печатает каждый элемент. Тип каждого элемента Node. Например, ваш вывод содержит представление узлов: Объект ниже представляет собой один узел, определенный в функции __main__. Его тип - Node Object, а адрес памяти - 0x000001EB465D8048

<__main__.Node object at 0x000001EB465D8048>

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

Например, если бы вы изменили свой класс Node, чтобы он имел следующую структуру, то вы могли бы просто использовать print(element, end = "\n") в своем методе printQueue.

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
        self.prev = None

    def __str__(self):
        return str(self.data)

Тогда результат будет

The elements in the queue are 
9
12
15
18

Более того, хотя он не имеет прямого отношения к вашему вопросу, он достаточно касателен, чтобы вы могли найти его полезным. Объекты Python имеют метод __str__ и __repr__. Проще говоря, __str__ используется для представления читаемой формы вашего объекта, а __repr__ - однозначного представления.

Для получения дополнительной информации об этих двух методах, это сообщение stackoverflow хорошо объясняет их.

1 голос
/ 27 марта 2020

Когда вы распечатываете элемент, вы печатаете расположение памяти объекта.

<__main__.Node object at 0x000001EB465D8048><__main__.Node object at 0x000001EB465D8128><__main__.Node object at 0x000001EB465D8080><__main__.Node object at 0x000001EB465D80F0>

Шестнадцатеричные значения - это адреса.

Для доступа к значению, присутствующему в этих местах, используйте element.data вместо element.

...