Data Structures and Algorithms - garevna/js-course GitHub Wiki

  • Структуры данных - это способы организации и хранения данных
  • Алгоритм — последовательность действий ( операций )

Структуры данных и алгоритмы тесно связаны

В зависимости от выбранной структуры данных применяются различные алгоритмы доступа к данным

Алгоритмы характеризуются производительностью

Под производительностью алгоритма понимается:
 - число операций алгоритма
 - объем необходимой памяти

Основные структуры данных:

:large_blue_diamond: Связный список
:large_blue_diamond: Динамический массив
:large_blue_diamond: Стеки и очереди
:large_blue_diamond: Графы
:large_blue_diamond: Двоичное дерево поиска

Бинарное дерево

У каждого дерева есть корень ( root ) и узлы ( node )

Двоичное дерево:

 - каждый узел имеет не более двух дочерних узлов
 - левый дочерний узел имеет значение, меньше чем значение родительского узла
 - правый дочерний узел имеет значение, больше или равное значению родительского узла

Коллекции

Конструктор
var Collection = function ( name, createItem ) {
    this.items = []
    this.name = name || "collection"
    this.itemsCounter = ( function () {
        var counter = 0
        return function ( operationType ) {
            return Math.abs ( operationType ) !== 1 ?
                   counter : counter += operationType 
        } 
    })()
    this.createItem = typeof createItem === "function" ?
                      createItem : null
}
Collection.prototype.removeItem = function ( itemNum ) {
    if ( itemNum > this.itemsCounter () ) return false
    this.items = this.items.filter ( x => {
        if ( x.index > itemNum ) --x.index
        return x.index !== itemNum
    })
}
Collection.prototype.addItem = function ( item ) {
    item.index = this.itemsCounter ( 1 )
    this.items.push ( this.createItem ? this.createItem ( item ) : item )
}
Использование
var tags = new Collection ( "elements", function ( params ) {
    var elem = document.createElement ( params.tagName || "div" )
    var parentElement = params.parent || document.body
    parentElement.appendChild ( elem )
    if ( params.id ) elem.id = params.id
    if ( params.className )
        elem.id = params.className
    elem.innerHTML = params.innerHTML || ""
        
    if ( params.styles && typeof params.styles === "object" ) {
        for ( var x in params.styles ) {
            console.log ( x )
            elem.style [ x ] = params.styles [x]
        }
    }
    return elem
} )