ds-kit-js - v1.1.0
    Preparing search index...

    Быстрый старт

    npm install ds-kit-js
    

    Пакет не имеет зависимостей, работает в Node.js 20+ и современных браузерах, поставляется в форматах ESM и CommonJS со встроенными типами TypeScript.

    // ESM / TypeScript
    import { Queue, RedBlackTree, Graph } from 'ds-kit-js';

    // CommonJS
    const { Queue, RedBlackTree, Graph } = require('ds-kit-js');

    Пакет помечен как sideEffects: false, поэтому бандлеры (Vite, webpack, esbuild) удаляют неиспользуемые структуры из итоговой сборки.

    Почти все коллекции устроены одинаково, поэтому, освоив одну, легко пользоваться остальными:

    Член Назначение
    new X(iterable?) создать коллекцию, сразу заполнив её из массива, Set, генератора и т. п.
    size количество элементов (геттер, как у Map/Set)
    isEmpty() true, если коллекция пуста
    clear() удалить все элементы
    toArray() элементы массивом
    for...of, [...x] итерация (порядок описан в документации каждой структуры)

    Методы-«модификаторы» вроде push, enqueue, addEdge возвращают this, поэтому вызовы можно объединять в цепочки:

    const queue = new Queue<number>().enqueue(1).enqueue(2).enqueue(3);
    

    Методы, которые извлекают элемент из пустой коллекции (pop, dequeue, peek…), возвращают undefined, а не бросают исключение. Исключение RangeError бросается только при явно некорректных аргументах: отрицательной ёмкости, индексе вне диапазона и т. п.

    Все структуры обобщённые (generic). Тип элементов выводится из начальных данных или задаётся явно:

    const numbers = new Stack([1, 2, 3]); // Stack<number>
    const users = new Queue<User>(); // Queue<User>

    Упорядоченные структуры (BinarySearchTree, AVLTree, RedBlackTree, SkipList, SortedMap, BinaryHeap) по умолчанию сравнивают элементы операторами < и >. Это подходит для чисел, строк, bigint и Date. Для объектов передайте компаратор — функцию с тем же контрактом, что у Array.prototype.sort:

    import { AVLTree, reverseCompare } from 'ds-kit-js';

    interface User { id: number; name: string }

    const byId = new AVLTree<User>([], (a, b) => a.id - b.id);
    byId.insert({ id: 2, name: 'Борис' });
    byId.insert({ id: 1, name: 'Анна' });

    // get() ищет по компаратору и возвращает хранимый объект целиком
    byId.get({ id: 2 } as User)?.name; // 'Борис'

    // Обратный порядок
    const desc = new AVLTree<number>([], reverseCompare());

    Элементы, равные по компаратору, считаются дубликатами: множества (*Tree, SkipList) хранят только первый из них, а SortedMap перезаписывает значение.

    ⚠️ Не изменяйте у объекта поля, по которым он сравнивается, пока он лежит в дереве или куче: это нарушит порядок. Удалите объект, измените его и вставьте заново.