💻Data Structures

How to efficiently pack information. Methods for organizing and storing data in computer memory for optimal access and modification

Article body and graph labels may still appear in Russian where English translations have not been added yet.
📖5 min read📊Level 4🗺️4 subtopics📅April 16, 2026

Loading map...

Зачем компьютеру «полочки для данных»

Представь библиотеку без каталога: чтобы найти книгу, придётся перебрать все полки. Структуры данных — это и есть каталоги, полки и ящички внутри компьютерной памяти. Правильный выбор структуры ускоряет программу в тысячи раз; неправильный — превращает секундную задачу в часовую.

Формально структура данных — способ хранения элементов в памяти вместе с набором операций (добавление, удаление, поиск, обход). Одни и те же числа можно хранить в массиве, списке, дереве или хеш-таблице — и каждый вариант ускоряет одни операции за счёт других.

Линейные структуры: массивы, списки, стеки

Массив (array) — элементы лежат подряд в памяти, доступ по индексу за O(1). Обратная сторона: вставка в середину стоит O(n), потому что нужно сдвигать все последующие ячейки. Массивы появились ещё в FORTRAN (1957) и остаются самой используемой структурой.

Связный список (linked list) — каждый элемент хранит указатель на следующий. Вставка и удаление за O(1) в любом месте, но поиск по номеру — O(n). Алгоритм Аллена Ньюэлла и Герберта Саймона (1955–1956) использовал списки в Logic Theorist — первой программе искусственного интеллекта.

Стек (stack) — «магазин»: последний пришёл — первый ушёл (LIFO). Калькулятор HP-35 (1972) работал именно на стеке. Очередь (queue) — первый пришёл — первый ушёл (FIFO), как очередь в магазине.

Деревья: от двоичных до B-деревьев

Двоичное дерево поиска (BST) — каждый узел хранит значение, левое поддерево содержит значения меньше, правое — больше. Поиск, вставка и удаление занимают O(log n) в среднем, но O(n) в худшем случае, когда дерево вырождается в список.

Решение придумали Г.М. Адельсон-Вельский и Е.М. Ландис в 1962 году — AVL-дерево, первая самобалансирующаяся структура. Она гарантирует O(log n) для всех операций за счёт поворотов при вставке. Позднее появились красно-чёрные деревья Р. Байера (1972), которые используются в ядре Linux и стандартной библиотеке C++ (std::map).

B-дерево (Байер и Маккрейт, 1970) — дерево с сотнями ключей в узле. Оптимизировано для дисковых операций: один узел = одна страница диска. Все современные базы данных (PostgreSQL, MySQL) используют B-деревья или их вариант B+-дерево для индексов.

Хеш-таблицы: поиск за O(1)

Хеш-функция превращает ключ (строку, число) в индекс массива. В идеале поиск занимает O(1) — одно обращение к памяти. Хеширование предложил Ханс Петер Лун (IBM, 1953), а первая крупная реализация появилась в компиляторе Lisp Джона Маккарти (1958).

Проблема — коллизии: два ключа попадают в одну ячейку. Два подхода: цепочки (в каждой ячейке — список) и открытая адресация (ищем следующую свободную ячейку). Python dict, Java HashMap, JavaScript Object — все используют хеш-таблицы под капотом.

Графы: структура для связей

Граф — множество вершин и рёбер между ними. Хранится либо как матрица смежности (массив N×N), либо как список смежности (для каждой вершины — список соседей). Матрица быстро проверяет наличие ребра, но занимает O(N²) памяти. Список экономит память для разреженных графов.

Социальные сети (Facebook — 3 млрд вершин), маршрутизация GPS (OpenStreetMap — 8 млрд рёбер) и интернет-маршрутизация (BGP) — всё это задачи на графах. Алгоритм Дейкстры (1959) для кратчайших путей и PageRank Google (1998) работают именно с графовыми структурами.

Как выбрать структуру: шпаргалка

Выбор зависит от главной операции. Частый поиск по ключу — хеш-таблица. Сортированные данные с быстрой вставкой — сбалансированное дерево. Очередь задач — heap (куча). Текст с частыми вставками — rope (верёвка). Нет универсального ответа — структура подбирается под задачу, как инструмент под материал.

Простыми словами

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

Зачем это нужно

Правильный выбор структуры ускоряет программу в тысячи раз. Поиск по 1 миллиону записей: массив (перебор) — 500 000 операций, хеш-таблица — 1 операция, дерево — 20 операций.

💡Метод Фейнмана

Представь гардероб. Массив — все вещи на одной полке по порядку: легко достать 5-ю, сложно вставить в середину. Связный список — вещи в коробках, каждая с запиской «следующая в шкафу». Дерево — вещи по категориям: зимнее→куртки→пуховик. Хеш-таблица — номерной гардероб: отдаёшь пальто, получаешь номерок, забираешь за секунду.

🧠Запомнить легко

МАСДХГ по скорости поиска: Массив O(n), Список O(n), Дерево O(log n), Хеш O(1), Граф — зависит от алгоритма.

  1. 1

    Ньюэлл и Саймон создают связные списки для Logic Theorist

  2. 2

    FORTRAN вводит массивы как базовую структуру

  3. 3

    Адельсон-Вельский и Ландис изобретают AVL-дерево

  4. 4

    Байер и Маккрейт создают B-дерево для баз данных

  5. 5

    Красно-чёрные деревья Байера — основа std::map

  6. 6

    PageRank Google работает на графовых структурах

6 ключевых событий

Сравнение основных структур данных

Скорость операций в среднем случае (Big O)

СтруктураПоискВставкаУдалениеПамять
МассивO(n)O(n)O(n)O(n)
Связный списокO(n)O(1)*O(1)*O(n)
BST (сбалансир.)O(log n)O(log n)O(log n)O(n)
Хеш-таблицаO(1)O(1)O(1)O(n)
B-деревоO(log n)O(log n)O(log n)O(n)

Сравнительная таблица: анализ различий

Часто задаваемые вопросы

Для поиска по ключу — хеш-таблица (O(1) в среднем). Для сортированных данных — сбалансированное дерево (O(log n) с гарантией). Универсально «самой быстрой» нет — зависит от операции.