Кевин Пунгей
Начиная с очереди
Когда вы идете в дрожание хижины, чаще всего есть другие люди на линии, ожидающие, которые будут поданы. Клиенты расположены в определенном порядке, во-первых, во-первых. Другие реальные сценарии – это платные кабины или свадебные часыватели в Вегасе. Этот метод заказа данных для обслуживания, в нашем случае людей, в том, какие очереди все о.
Очески очень похожи на стеки, касающиеся интерфейса, с возможностью разницы вкладывают данные процесса в последний раз.
Поэтому у нас есть различия в порядке обработки – почему? Нам нужен другой метод обработки данных, которые сохраняют заказ. Например, предположим, что у нас есть поток данных в узле. Как это приходит, нам нужно что-то сделать для этого, а затем написать его в файл, чтобы прочитать позже. Для простоты, скажем, нам нужно извлечь выгоду из каждого напитка. Что произойдет, если мы использовали структуру данных LIFO или стека?
Основной причиной является справедливая очередь справедливых данных и сохраняет порядок сбора. Это также происходит, когда мы повторяем предметы с использованием петли, Foreach () или Map () (). Каждый элемент в массиве обрабатывается в порядке его вставленного, из индекса 0 на index.Length – 1.
В очередях предметы обрабатываются в порядке их вставленных.
Реализация
Простая реализация с использованием массивов – это сдвиг метода (), чтобы удалить спереди и без смещения (), чтобы добавить фронт.
Как мой пост на стеках Мы опишем API для очереди. Затем мы начнем с реализации, используя псевдоклассический метод и базовый объект.
Когда элемент вставлен в очередь, он называется Снаряжение Отказ Когда элемент удален, оно Взыскание Отказ Другие методы включают в себя PEEK, содержит, до и подсчет.
Чтобы отслеживать ваши вещи, мы используем голову для передней части очереди и хвоста для спины. Разница между двумя дает размер очереди.
Наш механизм хранения выглядит следующим образом:
// _underscores indicate "private variables" to other engineers
const Queue = function(capacity) { this.storage = {}; this.capacity = capacity || Infinity; this._head = 0; this._tail = 0}let q = new Queue();q; // Queue { storage: {}, capacity: Infinity, _head: 0, _tail: 0 }Enqueue:
Queue.prototype.enqueue = function(value) { if (this.count() < capacity) { this.storage[this._tail++] = value; return this.count(); } return "Max capacity reached, please remove a value before enqueuing"}Нанести:
Queue.prototype.dequeue = function() { if (this.count() === 0) { return "Nothing in the queue"; } else { let element = this.storage[this._head]; delete this.storage[this._head]; if (this._head < this._tail) { this._head++; } return element; }}Оставшиеся API:
Queue.prototype.peek = function() { return this.storage[this._head]}Queue.prototype.contains = function(value) { for (let i = this._head; i < this._tail; i++) { if (this.storage[i] === value) { return true; } } return false;}Queue.prototype.until = function(value) { for (let i = this._head; i < this._tail; i++) { if (this.storage[i] === value){ return i - this._head + 1; } } return null;}Queue.prototype.count = function() { return this._tail - this._head;}let q = new Queue();q.enqueue('ww');q.enqueue('aa');q; // Queue {capacity: Infinity, storage: { 0: 'ww', 1: 'aa' }, _head: 0, _tail: 2 }q.enqueue('bb');q.peek(); // 'ww'q.dequeue(); // 'ww'q; //Queue {capacity: Infinity, storage: { 1: 'aa', 2: 'bb' }, _head: 1, _tail: 3 }q.contains('bb'); // trueq; //Queue {capacity: Infinity,storage: { 1: 'aa', 2: 'bb' }, _head: 1, _tail: 3 }q.until('bb'); // 2q.count(); // 2Под капотом мы узнали в Мой пост на стеках , что в любое время вызывается функция, это создает контекст выполнения и выделяется кадр стека на стеке выполнения. Есть ли что-нибудь похожее в JavaScript, которое использует очереди? Да: контур событий.
Контур и очереди событий
Прежде чем мы доберемся до того, что такое петли событий, мы должны сначала понять несколько терминов.
Параллелизм – в информатике, части компьютерной программы могут закончиться заказа, не влияя на результат. В контексте JavaScript он относится к способности цикла событий выполнить функции обратного вызова после завершения другой работы.
Время выполнения – время, в котором работает программа.
Неблокировка против блокировки – Блокировка – это когда выполнение программы JavaScript должна дождаться до тех пор, пока не будет завершена другая часть программы, а иногда и операции без JavaScript. По сути, синхронно, делайте одну вещь в Time.p
Неблокирующие операции, с другой стороны, работают асинхронно. Они используют обратные вызовы, которые позволяют продолжать операции, и когда работа завершена, обратный вызов, связанный с этой конкретной функцией или событиями.
Системное ядро – является центральной частью операционной системы. Он управляет операциями компьютера и памяти и аппаратного обеспечения, в частности, ЦП. Чтобы быть более эффективным, контур событий выгружает определенные операции к ядру.
Теперь к контуре события.
JavaScript – это один резьбовый язык. Это означает, что поток выполнения идет в порядке, и он делает одно за раз. Node.js построен из Chrome V8 Engine И он использует непрерывный циклический цикл, ожидающий входящих соединений.
Когда асинхронная функция выполняется, она входит в петлю события. Сообщение, связанное с этой функцией, входит в Очередь сообщений в порядке его принято. Другие функции уже в цикле выполняются или обрабатываются. Когда сообщение будет выполнено, функция обратного вызова выполняется и помещается в стек выполнения.
Все время, цикл событий продолжает вращаться, ожидание большего количества соединений. Вот как очереди используются за кулисами в JavaScript.
Сложность времени
Операции очередей очень эффективны. Enqueue, dequeue, peek и count – самая быстрая работа в постоянном времени. Содержит и до тех пор, пока наш размер ввода увеличивается, увеличивается в линейном времени O (n);
Enque o (1) dequeue o (1) PEEK O (1) Count o (1) содержит o (n) до O (n)
Спасибо за прочтение. Если вы не знакомы со стеками, пожалуйста, проверьте мой Другое статья на них для более контекста.
Оригинал: “https://www.freecodecamp.org/news/data-structures-101-queues-a6960a3c98/”