«Плохие программисты беспокоятся о коде. Хорошие программисты беспокоятся о структурах данных и их отношениях ».

- Линус Торвальдс, создатель Linux и Git

На самом деле, одна из самых сложных частей в программировании - это структурирование данных.

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

Стеки и очереди проще, потому что они состоят из связанных списков. Деревья и графики сложнее, потому что они расширяют концепцию связанных списков.

Среди этих типов наиболее часто используются связанные списки и хеш-таблицы, которые подробно рассматриваются ниже.

Связанные списки

Связанные списки хранят информационные компоненты в последовательном запросе. Связанные записи содержат не файлы, а указатели на различные компоненты. Основная ступица называется головкой, а последняя ступица - хвостом. В отдельно подключенном кратком описании каждый концентратор имеет только один указатель на следующий концентратор. Здесь голова - это место, с которого мы начинаем прогулку вниз по тому, что осталось от списка. В двухсвязном рандауне дополнительно сохраняется указатель на прошлый хаб. Впоследствии мы можем начать с хвоста и ходить «задом наперед» вокруг головы.

В приведенном ниже классе объясняются основы связанного списка.

class Node {

constructor (value, next, prev) {

this.value = значение;

this.next = следующий;

this.prev = prev;

}

}

class LinkedList {

constructor () {

this.head = null;

this.tail = null;

}

addToHead (value) {

const node = новый узел (значение, null, this.head);

если (this.head) this.head.next = узел;

иначе this.tail = node;

this.head = node;

}

addToTail (value) {

const node = новый узел (значение, this.tail, null);

если (this.tail) this.tail.prev = node;

иначе this.head = node;

this.tail = node;

}

removeHead () {

если (! this.head) вернет ноль;

значение константы = this.head.value;

this.head = this.head.prev;

если (this.head) this.head.next = null;

иначе this.tail = null;

возвращаемое значение;

}

removeTail () {

если (! this.tail) вернуть ноль;

const value = this.tail.value;

this.tail = this.tail.next;

если (this.tail) this.tail.prev = ноль;

иначе this.head = null;

возвращаемое значение;

}

search (значение) {

пусть текущий = this.head;

while (current) {

if (current.value === value) возвращаемое значение;

current = current.prev;

}

return null;

}

indexOf (значение) {

константные индексы = [];

пусть текущий = this.tail;

пусть index = 0;

while (current) {

если (current.value === значение) indexes.push (index);

current = current.next;

index ++;

}

возвратные индексы;

}

}

Взгляните на приведенный выше класс, они практически объясняют основы связанных списков.

Хеш-таблица

Хеш-таблица - это словесная ссылка, подобная структуре, которая устанавливает ключи для значений. Область в памяти каждого совпадения контролируется хеш-обработкой, которая подтверждает ключ и возвращает место, где комбайн должен быть встроен и восстановлен. Воздействие может произойти, если хотя бы два ключа преобразуются в одно и то же место. Для понимания, получатели и установщики должны предусмотреть такие случаи, чтобы гарантировать, что вся информация может быть восстановлена, и никакая информация не будет перезаписана. Обычно связанные записи предлагают наименее сложную организацию. Наличие огромных столов тоже имеет значение.

Достигнутые Интернетом, разработки блокчейнов пытаются открыть исходный код точной структуры сети на уровне соглашений. Используя возможности хеширования для создания неизменяемых отпечатков пальцев для каждого квадрата информации, по сути, вся база данных может прозрачно существовать в сети, чтобы любой мог ее видеть и добавлять. По сути, блокчейны - это просто раздельно связанные системы двойных деревьев криптографических хэшей. Хеширование является загадочным до такой степени, что база данных денежных обменов может быть создана и обновлена ​​в открытом доступе кем угодно! Удивительные последствия - это просто великолепное влияние на зарабатывание денег. То, что когда-то было работоспособным для правительств и национальных банков, теперь каждый может безопасно зарабатывать деньги самостоятельно! Это ключевое знание, признанное создателем Ethereum и псевдонимом автора Биткойна.

class Node {

конструктор (ключ, значение) {

this.key = ключ;

this.value = значение;

this.next = null;

}

}

class Table {

constructor (size) {

this.cells = новый массив (размер);

}

hash (key) {

пусть total = 0;

for (пусть i = 0; i ‹key.length; i ++) total + = key.charCodeAt (i);

вернуть общий% this.cells.length;

}

insert (ключ, значение) {

const hash = this.hash (ключ);

if (! this.cells [hash]) {

this.cells [hash] = новый узел (ключ, значение);

} else if (this.cells [hash] .key === key) {

this.cells [хэш] .value = значение;

} еще {

пусть узел = this.cells [хэш];

while (node.next) {

if (node.next.key === key) {

node.next.value = значение;

возвращение;

}

node = node.next;

}

node.next = новый узел (ключ, значение);

}

}

get (key) {

const hash = this.hash (ключ);

если (! this.cells [hash]) return null;

еще {

пусть узел = this.cells [хэш];

while (узел) {

если (node.key === key) return node.value;

node = node.next;

}

return null;

}

}

получить все() {

const table = [];

for (let i = 0; i ‹this.cells.length; i ++) {

константная ячейка = [];

let node = this.cells [i];

while (узел) {

cell.push (node.value);

node = node.next;

}

table.push (ячейка);

}

таблица возврата;

}

}

Вывод:

Экземпляры этих информационных структур можно найти повсюду в Интернете. От базы данных до сервера и клиента, и даже от самого двигателя JavaScript, эти информационные структуры конкретизируют то, что по сути является простым включением и выключением «переключателей» на кремниевых микросхемах, в точные «объекты». Несмотря на то, что они только что продвинуты, влияние этих предметов на общество колоссально. Ваша способность читать эту статью открыто и безопасно подтверждает изумительный дизайн сети и структуру ее информации. Однако это только начало. Искусственное сознание и децентрализованные блокчейны в ближайшие десятилетия переклассифицируют человечество и работу организаций, которые контролируют нашу жизнь. Кусочки экзистенциального знания и институциональная дезинтермедиация будут качествами сети, которая наконец-то сложилась.