Структуры данных

Реализация Python (очередь)

# Полная работающая программа Python Queue в 31 строке кода.

Этап 1 (класс Node)

Реализация очереди достаточно проста. Нам просто нужен класс Node, который хранит значение next и data.

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

Этап 2 (Создание головного и конечного узлов)

Для нашей реализации Queue нам нужно создать два эталонных объекта с именами head и tail. Это позволит нам удалитьобъект из головы (представляет начало очереди)и добавитьобъект в хвост (представляет конец очереди).

class Queue(object):    
    def __init__(self):  
        self.head = None        
        self.tail = None

Этап 3 (методы isEmpty и Peek)

Метод isEmpty() очень прост, просто возвращайте значение, если значение заголовка равно нулю;return self.head == None. Если значение заголовка равно нулю, то очередь пуста, в противном случае это не так.

def isEmpty(self):
        return self.head == None

Метод peek() покажет нам 1-е значение в нашей очереди, это достигается с помощью return head.data. Это вызовет исключение, когда заголовок равен нулю. Если вы хотите, вы можете явно проверить это исключение.

def peek(self):
        return self.head.data

Этап 4 (Добавить и удалить узел)

Чтобы добавить узел (в очередь) в конец очереди, сначала необходимо создать узел. Затем, если хвост не равен нулю, пусть следующий указатель хвоста указывает на новый узел, а затем обновляет хвост. Затем мы хотим убедиться, что даже в случае, когда очередь полностью пуста (в этом случае head == null), это значение должно быть значением заголовка.

def enqueue(self, data):
        new_data = Node(data)
        if self.head is None:
           self.head = new_data
           self.tail = self.head
        else:
           self.tail.next = new_data
           self.tail = new_data

Чтобы удалить узел (удалить из очереди) из головы очереди. Первое, что нужно сделать, это получить данные заголовкаdata = self.head.data. Затем мы просто хотим изменить значение заголовка, чтобы оно было следующим значением. Поэтому установите self.head = self.head.next, и это фактически удалит его из очереди. Затем мы говорим, что если значение заголовка равно нулю, убедитесь, что значение хвоста также установлено равным нулю. Затем верните эти данные.

def dequeue(self):
        data = self.head.data
        self.head = self.head.next
        if self.head is None:
           self.tail is None
        return data

Полная реализация

Вот как должен выглядеть ваш код :)

Тестовые случаи

Хорошей практикой является тестирование вашего товара, чтобы увидеть, работает ли он (:

Поздравляем с завершением реализации Python очереди. Итак, это основы реализации Queue. Методы довольно логично вытекают из фактического дизайна и алгоритма, лежащего в его основе. :) !