Учебники

Шаблоны Python Design — Очереди

Очередь — это набор объектов, которые определяют простую структуру данных в соответствии с процедурами FIFO (Fast In Fast Out) и LIFO (Last In First Out). Операции вставки и удаления называются операциями постановки и удаления .

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

Как реализовать процедуру FIFO?

Следующая программа помогает в реализации FIFO —

import Queue

q = Queue.Queue()

#put items at the end of the queue
for x in range(4):
   q.put("item-" + str(x))

#remove items from the head of the queue
while not q.empty():
   print q.get()

Выход

Вышеуказанная программа генерирует следующий вывод —

Fifo

Как реализовать процедуру LIFO?

Следующая программа помогает в реализации процедуры LIFO —

import Queue

q = Queue.LifoQueue()

#add items at the head of the queue
for x in range(4):
   q.put("item-" + str(x))

#remove items from the head of the queue
while not q.empty():
   print q.get()

Выход

Вышеуказанная программа генерирует следующий вывод —

в магазинном порядке

Что такое приоритетная очередь?

Очередь приоритетов — это структура данных контейнера, которая управляет набором записей с упорядоченными ключами, чтобы обеспечить быстрый доступ к записи с наименьшим или наибольшим ключом в указанной структуре данных.

Как реализовать приоритетную очередь?

Реализация очереди приоритетов выглядит следующим образом —

import Queue

class Task(object):
   def __init__(self, priority, name):
      self.priority = priority
      self.name = name
   
   def __cmp__(self, other):
      return cmp(self.priority, other.priority)

q = Queue.PriorityQueue()

q.put( Task(100, 'a not agent task') )
q.put( Task(5, 'a highly agent task') )
q.put( Task(10, 'an important task') )

while not q.empty():
   cur_task = q.get()
	print 'process task:', cur_task.name

Выход

Вышеуказанная программа генерирует следующий вывод —