Рубрики
Без рубрики

Структуры данных 101: очереди

Конструкции данных Cevin Turnee Data 101: QueueueueueCredit: Systems Att Systems GrougStarting с QueueWhen Вы идете в Shake Shack, чаще всего есть другие люди на линии, ожидающие, которые будут поданы. Клиенты расположены в определенном порядке, во-первых, во-первых. Другие реальные сценарии – это платные стенды или

Кевин Пунгей

Начиная с очереди

Когда вы идете в дрожание хижины, чаще всего есть другие люди на линии, ожидающие, которые будут поданы. Клиенты расположены в определенном порядке, во-первых, во-первых. Другие реальные сценарии – это платные кабины или свадебные часыватели в Вегасе. Этот метод заказа данных для обслуживания, в нашем случае людей, в том, какие очереди все о.

Очески очень похожи на стеки, касающиеся интерфейса, с возможностью разницы вкладывают данные процесса в последний раз.

Поэтому у нас есть различия в порядке обработки – почему? Нам нужен другой метод обработки данных, которые сохраняют заказ. Например, предположим, что у нас есть поток данных в узле. Как это приходит, нам нужно что-то сделать для этого, а затем написать его в файл, чтобы прочитать позже. Для простоты, скажем, нам нужно извлечь выгоду из каждого напитка. Что произойдет, если мы использовали структуру данных 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/”