Эта статья поможет вам понять структуру данных очереди и как ее реализовать.
Очередь – это простой концепция структуры данных, которую можно легко применять в нашей жизни, вроде, как когда вы стоете в очереди, чтобы купить кофе в Starbucks. Давайте сделаем несколько наблюдений, основанных на этом примере:
Теперь давайте посмотрим на вышеуказанные пункты программно:
- Очереди открыты с обоих концов, означающие элементы, добавляемые сзади и удаляются спереди
- Элемент, который будет добавлен первый, сначала удаляется (первым в первом – FIFO) Если все элементы удалены, то очередь пуста, и если вы попытаетесь удалить элементы из пустой очереди, выдается предупреждение или сообщение об ошибке.
- Если очередь заполнена, и вы добавляете больше элементов в очередь, необходимо бросить предупреждение или сообщение об ошибке.
Алгоритм
- Объявите список и целое число Maxsize, обозначая виртуальный максимальный размер очереди
- Голова и хвост изначально устанавливаются на 0
- Метод размера
- Рассчитывает количество элементов в очереди -> – голова
- Сброс метода:
- Сбрасывает хвост и направляю до 0
- Создает новую очередь (инициализирует очередь в новый список)
- Операция enqueue:
- Проверьте, если размер меньше, чем Maxsize:
- Если да, добавьте данные в очередь, а затем прирастить хвост на 1
- Если нет, Печать очереди полное сообщение
- Проверьте, если размер меньше, чем Maxsize:
- Операция декабря:
- Проверьте, если размер больше 0:
- Если да, покройте первый элемент из списка и увеличьте голову на 1
- Если нет:
- Метод сброса вызовов
- Печать очереди Пустое сообщение
- Проверьте, если размер больше 0:
class Queue: #Constructor def __init__(self): self.queue = list() self.maxSize = 8 self.head = 0 self.tail = 0 #Adding elements def enqueue(self,data): #Checking if the queue is full if self.size() >= self.maxSize: return ("Queue Full") self.queue.append(data) self.tail += 1 return True #Deleting elements def dequeue(self): #Checking if the queue is empty if self.size() <= 0: self.resetQueue() return ("Queue Empty") data = self.queue[self.head] self.head+=1 return data #Calculate size def size(self): return self.tail - self.head #Reset queue def resetQueue(self): self.tail = 0 self.head = 0 self.queue = list() q = Queue() print(q.enqueue(1))#prints True print(q.enqueue(2))#prints True print(q.enqueue(3))#prints True print(q.enqueue(4))#prints True print(q.enqueue(5))#prints True print(q.enqueue(6))#prints True print(q.enqueue(7))#prints True print(q.enqueue(8))#prints True print(q.enqueue(9))#prints Queue Full! print(q.size())#prints 8 print(q.dequeue())#prints 8 print(q.dequeue())#prints 7 print(q.dequeue())#prints 6 print(q.dequeue())#prints 5 print(q.dequeue())#prints 4 print(q.dequeue())#prints 3 print(q.dequeue())#prints 2 print(q.dequeue())#prints 1 print(q.dequeue())#prints Queue Empty #Queue is reset here print(q.enqueue(1))#prints True print(q.enqueue(2))#prints True print(q.enqueue(3))#prints True print(q.enqueue(4))#prints True
Примечание. Элемент 9 не был добавлен в очередь и, следовательно, размер очереди остается 8
Оригинал: “https://dev.to/hasansajedi/how-to-use-queue-in-python-15mp”