|
1 |
| -# Dequeue |
2 |
| -Stack, Queue and Dequeue |
| 1 | +# Stack, Queue and Dequeue |
| 2 | + |
| 3 | +Задания (на выбор): |
| 4 | +- Реализовать стек, очередь и дэк на прототипах и замыканиях |
| 5 | +- Реализовать стек через 2 класса (Stack + Element), то же и с очередью и дэком |
| 6 | +- Добавить протокол iterable |
| 7 | + - см. про `next()` и [`Symbol.iterator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) |
| 8 | +- Сделать методы и свойства: |
| 9 | + - Клонирование `.clone():list` |
| 10 | + - Очистка `.clear()` |
| 11 | + - Кол-во элементов `.size` |
| 12 | +- Реализовать события (чтоб можно было на них подписываться, но чтоб cнаружи |
| 13 | +нельзя было делать`emit`): |
| 14 | + - `.on('push', (element, dequeue) => {})` |
| 15 | + - `.on('pop', (element, dequeue) => {})` |
| 16 | + - `.on('unshift', (element, dequeue) => {})` |
| 17 | + - `.on('shift', (element, dequeue) => {})` |
| 18 | + - Когда дэк опустошен `.on('drain', (dequeue) => {})` |
| 19 | +- Взять односвязный или двусвязный список и унаследовать от него |
| 20 | +стек, очередь и дэк |
| 21 | +- Взять односвязный или двусвязный список и на базе их построить |
| 22 | +стек, очередь и дэк через механизм агрегированяи (делегирования) |
| 23 | +- Добавить в очерез таймаут ожидания в очереди `queue.timeout(msec)` |
| 24 | +- Добавить в очередь работу с приоритетами (упорядочить очередь по приоритету) |
| 25 | +- Реализовать очередь с приоритетами на базе массива и дерева |
| 26 | +- Асинхронные аналоги |
| 27 | + - `.pop((data) => {})` |
| 28 | + - `.shift((data) => {})` |
| 29 | + - аналоги на Promise |
| 30 | + |
| 31 | +Построение цепочек из очередей: |
| 32 | +```js |
| 33 | +const incoming = new Queue(); |
| 34 | +const calculating = new Queue(); |
| 35 | +const preparing = new Queue(); |
| 36 | + |
| 37 | +incoming.process(item => item).pipe(calculating); |
| 38 | +calculating.process(item => item).pipe(preparing); |
| 39 | +preparing.process(item => { |
| 40 | + console.log(item); |
| 41 | +}); |
| 42 | +``` |
0 commit comments