Giter Site home page Giter Site logo

javascript-tasks-8's Introduction

Задание №8: Стандартная библиотека

Цель этого задания – разработать библиотеку, предоставляющую стандартные структуры данных.

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.

Обязательные задачи

Необходимо реализовать следующие структуры данных.

Коллекция (Collection)

Коллекция элементов. Поддерживает операции вставки и извлечения первого и последнего элемента, хранит ссылки на первый и последний элемент.

  • first – первый элемент коллекции
  • last – последний элемент коллекции
  • length – количество элементов в коллекции
  • isEmpty – true, если коллекция пуста
  • pickFirst() – извлекает первый элемент из коллекции и возвращает его
  • pickLast() – извлекает последний элемент из коллекции и возвращает его
  • insertFirst() – вставляет элемент в начало колекции
  • insertLast() – вставляет элемент в конец коллекции
  • empty() – очищает коллекцию

Очередь (Queue)

Список элементов, организованных по принципу "первым пришёл – первым вышел". Элементы добавляются и извлекаются с одного конца списка.

  • length – количество элементов в очереди
  • enqueue(item) – добавляет элемент в очередь
  • dequeue() – извлекает элемент из очереди
  • empty() – очищает очередь

Массив фиксированной длины (Fixed array)

Массив фиксированного размера. Попытка добавить или получить элемент за пределами указанного диапазона должна вызывать ошибку RangeError.

  • length – количество элементов в массиве
  • insertAt(index, item) – записывает элемент в массив по заданному индексу
  • getAt(index) – возвращает элемент по указанному индексу.

Множество (Set)

Список, хранящий уникальные элементы.

  • length - количество элементов в множестве
  • insert(item) - добавляет элемент в множество
  • remove(item) - удаляет элемент из множества
  • has(item) - проверяет, входит ли элемент в множество
  • intersect(set) – возвращает множество элементов входящих в исходное множество и в переданное множество (в оба сразу)
  • union(set) – возвращает множество элементов входящих в исходное множество или в переданное множество (в любое из двух)
  • empty() – очищает множество

Встроенный объект Set использовать не разрешается.

Общие требования

  • код должен проходить валидацию jscs
  • код должен проходить тесты

Дополнительные задачи

Выберите два любых задания из трёх.

Не использовать массив

Реализовать базовую коллекцию на основе двусвязного списка. Список структур данных

Очередь с приоритетом PriorityQueue

Отличается от обычной очереди наличием приоритета у элементов.

  • enqueue(item, priority) – кладёт элемент с priority (целое число в интервале от 1 до 100)
  • dequeue() – извлекает элемент с наивысшим приоритетом из очереди. Если есть несколько элементов с одинаковым приоритетом, извлекается элемент, который был помещён в очередь первым (из элементов с наивысшим приоритетом).

Словарь (Map)

Отличается от стандартного объекта тем, что в качестве ключей можно использовать объекты, а не только строки.

В списке дополнительных материалов указана статья про преобразование объектов. Она может быть полезна.

  • length – количество элементов в словаре
  • addItem(key, item) – добавляет элемент в словарь по указанному ключу
  • removeItem(key) – извлекает элемент из словаря по указанному ключу
  • getItem(key) – возвращает элемент по указанному ключу
  • empty() – очищает словарь

Встроенный объект Map использовать не разрешается.

Материалы

  1. Лекция
  2. Презентация
  3. Список структур данных
  4. Объекты как ассоциативные массивы
  5. Преобразование объектов: toString и valueOf
  6. ООП в прототипном стиле

javascript-tasks-8's People

Contributors

gogoleff avatar sameoldmadness avatar

Watchers

 avatar  avatar  avatar

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.