Очередь является одной из очень важных структур данных, поскольку она используется в различных приложениях.
Если вы занимаетесь информатикой, вы, должно быть, слышали об этой структуре данных. Таким образом, очередь – это структура данных, которая хранит элемент в формате FIFO (First In First Out).
Таким образом, элемент, который добавляется первым, будет удален первым. Одним из лучших применений очереди является хранение функции обратного вызова или любой задачи, которая может быть выполнена через некоторое время.
Лучшим примером является очередь сообщений, предположим, что есть приложение, которое принимает ваши данные, такие как имя и номер мобильного телефона, и регистрирует вас в приложении, а после этого отправляет некоторое сообщение на указанный номер мобильного телефона.
Итак, предположим, что приложение используют несколько пользователей и регистрируются в приложении, поэтому будет сложно обрабатывать все данные и отправлять сообщения каждому человеку одновременно.
Таким образом, для этого архитектура приложения спроектирована таким образом, что оно принимает данные каждого пользователя и помещает сообщение в очередь сообщений, которое будет обработано позже.
Итак, из приведенного выше примера вы получили представление о том, что может делать очередь, существует множество приложений, которые вы можете поискать об этом, и вы получите больше представления об этом.
Теперь давайте посмотрим, как мы можем реализовать структуру данных очереди в Java. Я использую Java в качестве языка программирования, но вы можете выбрать любой язык программирования по вашему выбору.
Мы увидим операции Enqueue (добавление элемента в очередь) и Dequeue (удаление элементов из очереди).
Мы будем использовать массив для его реализации и использовать два указателя
- Чтобы узнать, в какой позиции добавляется элемент (
передний
указатель) - Какой элемент удалить (
задний
указатель).
Как мы знаем, очередь следует моде FIFO, поэтому указатель front
будет использоваться для определения позиции последнего элемента, добавленного в очередь, а указатель rear
будет указывать на последний удаленный элемент.
Итак, изначально спереди
и rear
будет равно -1, поскольку они не указывают ни на один элемент.
Мы создадим пример очереди класса и инициализируем очередь, спереди
и задний
указатель и емкость
переменная, чтобы узнать размер очереди.
public class QueueExample { private int[] queue; private int front; private int rear; private int capacity; public QueueExample(int size) { queue = new int[size]; front = -1; rear = -1; capacity = size; } }
Операция постановки в очередь
В этом мы напишем функцию для добавленного элемента в очередь и увеличим указатель front
, чтобы мы знали последний добавленный элемент. Перед добавлением мы проверим, осталось ли в очереди место для нового элемента.
public void enqueue(int value) { // check if queue has empty space if(isEmpty()) { queue[++front] = value; } else { System.out.print("Queue is full."); } } public boolean isEmpty() { return front < capacity; }
Операция Удаления из очереди
В этом мы напишем функцию, которая поможет нам удалить элемент из очереди. Когда мы будем удалять элемент, мы увеличим указатель out rear
, чтобы логически узнать последнее удаленное значение. Здесь мы не будем удалять элементы физически, они останутся в массиве и увеличат указатель rear
, и это будет рассматриваться как удаленное логически. Перед удалением мы проверим, содержит ли очередь какие-либо значения.
public void dequeue() { // check if queue has any value if(hasItem()) { int deletedValue = queue[++rear]; System.out.println("deleted "+deletedValue); } else { System.out.println("Queue is Empty"); } } public boolean hasItem() { return rear < front; }
Функция отображения
Для отображения значений из нашей очереди.
public void display() { // will display values from rear to front as rear < front if(hasItem()) { for(int i = rear+1; i <= front; i++) { System.out.println(queue[i]+" "); } } else { System.out.println("Queue is Empty."); } }
Функция драйвера
public static void main(String[] args) { System.out.println("This is a example of Queue."); QueueExample q1 = new QueueExample(5); // adding values q1.enqueue(10); q1.enqueue(20); q1.enqueue(30); // delete first added value i.e 10 q1.dequeue(); // display the result q1.display(); }
Оригинал: “https://dev.to/deepak_maurya/do-you-know-what-is-queue-data-structure-38l3”