https://github.com/howprogrammingworks/dequeue
Stack, Queue and Dequeue
https://github.com/howprogrammingworks/dequeue
data data-structures deque dequeue js jsvascript stack
Last synced: 5 months ago
JSON representation
Stack, Queue and Dequeue
- Host: GitHub
- URL: https://github.com/howprogrammingworks/dequeue
- Owner: HowProgrammingWorks
- License: mit
- Created: 2018-02-11T04:05:48.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-12-02T20:42:41.000Z (almost 2 years ago)
- Last Synced: 2025-06-22T06:04:17.092Z (5 months ago)
- Topics: data, data-structures, deque, dequeue, js, jsvascript, stack
- Language: JavaScript
- Homepage: https://www.youtube.com/TimurShemsedinov
- Size: 15.6 KB
- Stars: 4
- Watchers: 5
- Forks: 12
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Stack, Queue and Dequeue
[](https://www.youtube.com/watch?v=9KvA4hDDSjk)
Задания (на выбор):
- Реализовать стек, очередь и дэк на прототипах и замыканиях
- Реализовать стек через 2 класса (Stack + Element), то же и с очередью и дэком
- Добавить протокол iterable
- см. про `next()` и [`Symbol.iterator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)
- Сделать методы и свойства:
- Клонирование `.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
Построение цепочек из очередей:
```js
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); // второй параметр - приоритет
}
```