Цель этого задания – разработать библиотеку, предоставляющую стандартные структуры данных.
var Queue = require('./src/standard-library.js').Queue;
var queue = new Queue();
queue.enqueue("foo");
queue.enqueue("bar");
queue.enqueue("baz");
queue.dequeue(); // "foo"
queue.dequeue(); // "bar"
queue.dequeue(); // "baz"
Для этого необходимо написать реализацию функций-конструкторов, заданных в модуле standard-library.js
.
Заготовка модуля находится в папке src
. Тесты можно найти в папке test
.
- код должен проходить валидацию
jscs
- код должен проходить тесты
- код не должен содержать внешних библиотек
- прежде чем отправлять решение, проверьте его на соответствие общим требованиям.
// Устанавливаем проверяльщик
npm install
// Проверяем
npm test
// В результате выведутся ошибки, если они есть
Необходимо реализовать следующие структуры данных.
Коллекция элементов. Поддерживает операции вставки и извлечения первого и последнего элемента, хранит ссылки на первый и последний элемент.
- first – первый элемент коллекции
- last – последний элемент коллекции
- length – количество элементов в коллекции
- isEmpty – true, если коллекция пуста
- pickFirst() – извлекает первый элемент из коллекции и возвращает его
- pickLast() – извлекает последний элемент из коллекции и возвращает его
- insertFirst() – вставляет элемент в начало колекции
- insertLast() – вставляет элемент в конец коллекции
- empty() – очищает коллекцию
Список элементов, организованных по принципу "первым пришёл – первым вышел". Элементы добавляются и извлекаются с одного конца списка.
- length – количество элементов в очереди
- enqueue(item) – добавляет элемент в очередь
- dequeue() – извлекает элемент из очереди
- empty() – очищает очередь
Массив фиксированного размера. Попытка добавить или получить элемент за пределами указанного диапазона должна вызывать ошибку RangeError.
- length – количество элементов в массиве
- insertAt(index, item) – записывает элемент в массив по заданному индексу
- getAt(index) – возвращает элемент по указанному индексу.
Список, хранящий уникальные элементы.
- length - количество элементов в множестве
- insert(item) - добавляет элемент в множество
- remove(item) - удаляет элемент из множества
- has(item) - проверяет, входит ли элемент в множество
- intersect(set) – возвращает множество элементов входящих в исходное множество и в переданное множество (в оба сразу)
- union(set) – возвращает множество элементов входящих в исходное множество или в переданное множество (в любое из двух)
- empty() – очищает множество
Встроенный объект Set
использовать не разрешается.
Отличается от обычной очереди наличием приоритета у элементов.
- enqueue(item, priority) – кладёт элемент с priority (целое число в интервале от 1 до 100)
- dequeue() – извлекает элемент с наивысшим приоритетом из очереди. Если есть несколько элементов с одинаковым приоритетом, извлекается элемент, который был помещён в очередь первым (из элементов с наивысшим приоритетом).
Отличается от стандартного объекта тем, что в качестве ключей можно использовать объекты, а не только строки.
- length – количество элементов в словаре
- addItem(key, item) – добавляет элемент в словарь по указанному ключу
- removeItem(key) – извлекает элемент из словаря по указанному ключу
- getItem(key) – возвращает элемент по указанному ключу
- empty() – очищает словарь
Встроенный объект Map
использовать не разрешается.