Giter VIP home page Giter VIP logo

dequeue's Introduction

Stack, Queue and Dequeue

Структуры данных: списки, стек, очередь, дэк

Задания (на выбор):

  • Реализовать стек, очередь и дэк на прототипах и замыканиях
  • Реализовать стек через 2 класса (Stack + Element), то же и с очередью и дэком
  • Добавить протокол iterable
  • Сделать методы и свойства:
    • Клонирование .clone():list
    • Очистка .clear()
    • Кол-во элементов .size
  • Реализовать события (чтоб можно было на них подписываться, но чтоб cнаружи нельзя было делатьemit):
    • .on('push', (element, dequeue) => {})
    • .on('pop', (element, dequeue) => {})
    • .on('unshift', (element, dequeue) => {})
    • .on('shift', (element, dequeue) => {})
    • Когда дэк опустошен .on('drain', (dequeue) => {})
  • Взять односвязный или двусвязный список и унаследовать от него стек, очередь и дэк
  • Взять односвязный или двусвязный список и на базе их построить стек, очередь и дэк через механизм агрегированяи (делегирования)
  • Добавить в очерез таймаут ожидания в очереди queue.timeout(msec)
  • Добавить в очередь работу с приоритетами (упорядочить очередь по приоритету)
  • Реализовать очередь с приоритетами на базе массива и дерева
  • Асинхронные аналоги
    • .pop((data) => {})
    • .shift((data) => {})
    • аналоги на Promise

Построение цепочек из очередей:

const incoming = new Queue();
const calculating = new Queue();
const preparing = new Queue();

incoming.process(item => item).pipe(calculating);
calculating.process(item => item).pipe(preparing);
preparing.process(item => {
  console.log(item);
});

Реализация стека со сбором статичтики на замыканиях

const q = queue();

// Используем при помощи методов
q.put(obj1);
q.pick((obj2) => { });

// Выводим статистику использования
console.dir(q);

/* {
  elapsedTime: 12783, // время существования стека
  processed: 1773, // кол-во было обработано всего
  processing: 29, // кол-во обрабатывается сейчас
  minTime: 6, // минимальное время элемента в стеке
  maxTime: 1720, // максимальное время элемента в стеке
  averageTime: 803, // среднее время с стеке
} */

Реализация конкурентной очереди с приоритетами и трехканальной обработкой с таймаутами на замыканиях (реализация СМО, системы массового обслуживания)

const q = queue(3).timeout(2000);

q.process((item, callback) => {
  process.nextTick(() => {
    console.log(item);
    callback();
  });
});

q.drain(() => {
  console.log('Queue drain');
});

for (let i = 0; i < 10; i++) {
  q.add({ i }, i % 2); // второй параметр - приоритет
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.