Поскольку вы уже узнали о важности структур данных в предыдущей статье, давайте перейдем к теме статьи, то есть к структуре данных очереди. Я буду обсуждать следующие темы:
как выйти из метода в java
- Необходимость в структуре данных очереди
- Примеры очереди из повседневной жизни
- Создание структуры данных очереди
- В очереди
- Исключить из очереди
- Приложения очереди
Необходимость в структуре данных очереди
Предположим, вы однажды захотите посмотреть фильм. В мультиплексе билеты выдавались в порядке очереди, и люди стояли друг за другом в ожидании своей очереди. Так что ты будешь делать?? Вы, должно быть, подошли к концу и встали позади последнего, кто ждал билет.
Здесь люди стоят друг за другом и обслуживаются по Первый пришел - первый ушел (FIFO) механизм. Такое расположение известно как Очередь.
Примеры очереди из повседневной жизни
Давайте рассмотрим несколько примеров, когда мы используем тип очереди в повседневной жизни:
- Автоответчик Первым обслуживается человек, который первым звонит на ваш гаджет.
- Машина для проверки багажа - Проверяет багаж, который первым был оставлен на конвейерной ленте.
- Транспортные средства на платном мосту - Транспортные средства, прибывающие рано, уезжают первыми.
- Колл-центр - телефонные системы будут использовать очереди, чтобы удерживать звонящих в порядке, пока представитель службы не освободится.
Все эти примеры следуют Первый пришел - последний ушел стратегия.
Создание структуры данных очереди
Помимо дополнительных операций, я могу сказать, что основные возможные операции с очередью:
один. В очереди или добавить элемент в конец очереди.
2. Исключить из очереди или удалите элемент из начала очереди
Теперь давайте начнем с создания класса Queue в Python:
class Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0
- max_size - максимальное количество элементов, ожидаемых в очереди.
- Элементы очереди хранятся в списке Python
- Rear указывает позицию индекса последнего элемента в очереди.
- Задняя часть изначально принимается равной -1, потому что очередь пуста.
- Спереди указывается позиция первого элемента в очереди.
- Первоначально передняя часть принимается равной 0, потому что она всегда будет указывать на первый элемент очереди.
Поставить в очередь
Теперь, когда вы пытаетесь поставить элементы в очередь, вы должны помнить следующие моменты:
- Есть ли место в очереди или нет, т.е. если задняя часть равна max_size -1
- Задняя часть будет указывать на последний элемент, вставленный в очередь.
Итак, каков будет алгоритм ??
# возвращает max_size очереди def get_max_size (self): return self .__ max_size # возвращает логическое значение вне зависимости от того, заполнена очередь или нет, True, если заполнена, и False в противном случае def is_full (self): return self .__ rear == self .__ max_size-1 # вставляет / помещает данные в очередь, если они не заполнены def enqueue (self, data): if (self.is_full ()): print ('Очередь заполнена. Невозможно поставить в очередь') else: self .__ rear + = 1 self. __elements [self .__ rear] = data # отображать все содержимое очереди def display (self): for i in range (0, self .__ rear + 1): print (self .__ elements [i]) # Вы можете использовать ниже __str __ () для печати элементов объекта DS во время отладки def __str __ (self): msg = [] index = self .__ front while (index<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg
Теперь, когда вы выполните следующее:
queue1 = Очередь (5)
# Поставить в очередь все необходимые элементы.
queue1.enqueue («А»)
queue1.enqueue («B»)
queue1.enqueue («C»)
queue1.enqueue («D»)
queue1.enqueue («E»)
queue1.display ()
queue1.enqueue («F»)
печать (очередь1)
Вывод:
К
B
C
D
ЯВЛЯЕТСЯ
Очередь заполнена. Невозможно поставить в очередь
Данные очереди (спереди назад): A B C D E
Исключить из очереди
Теперь, когда вы вставили / поставили элементы в очередь, вы хотите исключить / удалить их спереди, поэтому вам нужно позаботиться о следующем:
- В очереди есть элементы, т.е. задний не должен быть равен -1.
- Во-вторых, вы должны помнить, что поскольку элементы удаляются спереди, то после удаления фронт должен быть увеличен до точки следующего фронта.
- Передняя часть не должна указывать на конец очереди, т.е. равняться max_size.
Итак, каков будет алгоритм ??
# функция для проверки, пуста ли очередь или нет def is_empty (self): if (self .__ rear == - 1 или self .__ front == self .__ max_size): return True else: return False #function для удаления элемента и возврата it def dequeue (self): if (self.is_empty ()): print ('очередь уже пуста') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data # функция для отображения элементов из от передней до задней, если очередь не пуста def display (self): if (not self.is_empty ()): for i in range (self .__ front, self .__ rear + 1): print (self .__ elements [i]) else : print ('пустая очередь')
Теперь, когда вы выполняете следующее:
queue1 = Очередь (5)
# Поставить в очередь все необходимые элементы
queue1.enqueue («А»)
queue1.enqueue («B»)
queue1.enqueue («C»)
queue1.enqueue («D»)
queue1.enqueue («E»)
печать (очередь1)
# Удалить из очереди все необходимые элементы
print («Удалено из очереди:«, queue1.dequeue ())
print («Удалено из очереди:«, queue1.dequeue ())
print («Удалено из очереди:«, queue1.dequeue ())
print («Удалено из очереди:«, queue1.dequeue ())
print («Удалено из очереди:«, queue1.dequeue ())
print («Удалено из очереди:«, queue1.dequeue ())
# Показать все элементы в очереди.
queue1.display ()
Вывод:
Данные очереди (спереди назад): A B C D E
Удалено из очереди: A
Удалено из очереди: B
Исключено из очереди: C
Удалено из очереди: D
Удалено из очереди: E
очередь уже пуста
Исключено из очереди: нет
пустая очередь
Приложения очереди
На данный момент вы уже поняли основы очереди. Теперь, чтобы погрузиться глубже, мы рассмотрим некоторые из его приложений.
- Пример 1:
Очередь печати в Windows использует очередь для хранения всех активных и ожидающих печати заданий. Когда мы хотим распечатать документы, мы посылаем команды печати одну за другой. На основании команд печати документы будут выстроены в очередь печати. Когда принтер будет готов, документ будет отправлен в порядке очереди для печати.
Предположим, вы выполнили команды печати для 3 документов в порядке doc1, за которым следуют doc2 и doc3.
Очередь печати будет заполнена, как показано ниже:
doc-n, где doc - это документ, отправленный на печать, а n, количество страниц в документе. Например, doc2-10 означает, что doc2 должен быть напечатан, и у него 10 страниц. Вот код, имитирующий работу очереди печати. Просмотрите код и посмотрите, как в этой реализации используется очередь.
class Queue: def __init __ (self, max_size): self .__ max_size = max_size self .__ elements = [None] * self .__ max_size self .__ rear = -1 self .__ front = 0 def is_full (self): if (self .__ Rear = = self .__ max_size-1): return True return False def is_empty (self): if (self .__ front> self .__ rear): return True return False def enqueue (self, data): if (self.is_full ()): print ('Очередь заполнена !!!') else: self .__ rear + = 1 self .__ elements [self .__ rear] = data def dequeue (self): if (self.is_empty ()): print ('Очередь пуста! !! ') else: data = self .__ elements [self .__ front] self .__ front + = 1 return data def display (self): for index in range (self .__ front, self .__ rear + 1): print (self .__ elements [index]) def get_max_size (self): return self .__ max_size # Вы можете использовать приведенную ниже __str __ () для печати элементов объекта DS при # отладке def __str __ (self): msg = [] index = self .__ front while (показатель<=self.__rear): msg.append((str)(self.__elements[index])) index+=1 msg=' '.join(msg) msg='Queue data(Front to Rear): '+msg return msg #function that enqueue are the documents to be printed in Queue named print_queue def send_for_print(doc): global print_queue if(print_queue.is_full()): print('Queue is full') else: print_queue.enqueue(doc) print(doc,'sent for printing') #function that prints the document if number of pages of document is less than #total number of pages in printer def start_printing(): global print_queue while(not print_queue.is_empty()): #here we dequeue the Queue and take the coument that was input first for printing. doc=print_queue.dequeue() global pages_in_printer #the aim of this for loop is to find number of pages of the of document which is doc name followed by “-“ for i in range(0,len(doc)): if(doc[i]=='-'): no_of_pages=int(doc[i+1:]) break if(no_of_pages<=pages_in_printer): print(doc,'printed') pages_in_printer-=no_of_pages print('Remaining no. of pages in printer:', pages_in_printer) else: print('Couldn't print',doc[:i],'. Not enough pages in the printer.') pages_in_printer=12 print_queue=Queue(10) send_for_print('doc1-5') send_for_print('doc2-3') send_for_print('doc3-6') start_printing()
Вывод:
doc1-5 отправлен в печать
doc2-3 отправлен в печать
doc3-6 отправлен в печать
doc1-5 напечатан
Остальные нет. страниц в принтере: 7
длина массива javascript
doc2-3 напечатан
Остальные нет. страниц в принтере: 4
Не удалось распечатать документ 3. В принтере недостаточно страниц
- Пример 2:
Давайте попробуем разобраться в другом примере, который использует структуру данных Queue. Можете ли вы попытаться понять код и сказать, что делает следующая функция?
- def fun (n):
- aqueue = Очередь (100)
- для числа в диапазоне (1, n + 1):
- enqueue (число)
- результат = 1
- а (not (aqueue.is_empty ())):
- num = AQUUE.DEQUEUE ()
- результат * = число
- печать (результат)
Когда функция fun () вызывается путем передачи n,
- строки со 2 по 4 ставят в очередь элементы с 1 по n
- строки с 5 по 8 находит продукт этих элементов, удаляя его из очереди один за другим
На этом мы подошли к концу статьи о структуре данных очереди. Если вы успешно поняли и запустили коды самостоятельно, вы больше не новичок в структуре данных очереди.
Есть вопрос к нам? Пожалуйста, укажите это в комментариях к этой статье, и мы свяжемся с вами как можно скорее.
Чтобы получить более глубокие знания о Python и его различных приложениях, вы можете зарегистрироваться в режиме реального времени. с круглосуточной поддержкой и пожизненным доступом.