Data structs

Ось перелік найпоширеніших структур даних у програмуванні, приблизно відсортований за частотою практичного використання в реальних проєктах (від найчастіших до більш спеціалізованих).

МісцеСтруктура данихДля чого використовується
1Масив (Array)Зберігання послідовностей елементів, швидкий доступ за індексом
2Динамічний масив (Vector, ArrayList, List)Масив зі змінним розміром
3Хеш-таблиця (Hash Map, Dictionary, Hash Table)Швидкий пошук за ключем
4Множина (Set, HashSet)Зберігання унікальних значень
5Зв’язний список (Linked List)Часті вставки та видалення елементів
6Черга (Queue)Обробка в порядку FIFO
7Стек (Stack)Обробка в порядку LIFO
8Дерево (Tree)Ієрархічні дані
9Бінарне дерево пошуку (BST)Впорядковане зберігання даних
10Купа (Heap, Priority Queue)Робота з пріоритетами
11Граф (Graph)Мережі, маршрути, залежності
12Trie (Префіксне дерево)Пошук слів, автодоповнення
13Збалансовані дерева (AVL, Red-Black Tree)Впорядковані колекції з гарантованою швидкістю
14B-Tree, B+TreeБази даних та файлові системи
15Deque (двостороння черга)Додавання та видалення з обох кінців
16Skip ListАльтернатива збалансованим деревам
17Segment TreeШвидкі запити на відрізках
18Fenwick Tree (BIT)Префіксні суми
19Disjoint Set (Union-Find)Об’єднання множин
20Suffix Tree / Suffix ArrayОбробка рядків
21Bloom FilterІмовірнісна перевірка належності
22KD-TreeПросторовий пошук
23QuadTree / OctTreeГеометрія, ігри
24RopeЕфективна робота з великими текстами

Найважливіші структури для співбесід і повсякденної роботи

Якщо вчити структури даних за пріоритетом, я б рекомендував такий порядок:

  1. Масиви (Array)
  2. Хеш-таблиці (HashMap)
  3. Stack
  4. Queue
  5. Linked List
  6. Tree
  7. Heap / Priority Queue
  8. Graph
  9. Set
  10. Trie
  11. Union-Find
  12. Segment Tree

Ці структури покривають приблизно 90–95% задач, які зустрічаються на співбесідах та в повсякденній розробці.

За складністю вивчення

Початковий рівень:

Середній рівень:

Просунутий рівень:

Експертний рівень:

Ось дорожня карта структур даних для співбесід і алгоритмічного програмування. Вона побудована так, щоб кожна наступна структура спиралася на попередні.

1. Масив (Array)

Найважливіша структура даних.

[10, 20, 30, 40]
 0   1   2   3

Основні операції

ОпераціяСкладність
Доступ за індексомO(1)
Зміна елементаO(1)
ПошукO(n)
Вставка в кінецьO(1)
Вставка всерединуO(n)
ВидаленняO(n)

Типові задачі


2. Хеш-таблиця (HashMap)

Зберігає пари ключ → значення.

"apple" -> 5
"banana" -> 8

Операції

ОпераціяСкладність
ПошукO(1)
ВставкаO(1)
ВидаленняO(1)

Типові задачі

Приклад:

freq = {}

for x in nums:
    freq[x] = freq.get(x, 0) + 1

3. Множина (Set)

Зберігає лише унікальні значення.

{1, 5, 7}

Операції

ОпераціяСкладність
Перевірка наявностіO(1)
ДодаванняO(1)
ВидаленняO(1)

Типові задачі


4. Стек (Stack)

Принцип LIFO:

3 ← top
2
1

Операції

ОпераціяСкладність
pushO(1)
popO(1)
topO(1)

Типові задачі


5. Черга (Queue)

Принцип FIFO:

1 -> 2 -> 3

Операції

ОпераціяСкладність
enqueueO(1)
dequeueO(1)
frontO(1)

Типові задачі


6. Зв’язний список (Linked List)

10 -> 20 -> 30 -> null

Операції

ОпераціяСкладність
Доступ за індексомO(n)
Вставка на початкуO(1)
Видалення вузлаO(1)

Типові задачі


7. Бінарне дерево (Binary Tree)

      10
     /  \
    5   15

Обходи

DFS

BFS

Рівень за рівнем.

Типові задачі


8. Бінарне дерево пошуку (BST)

      8
     / \
    3  10

Ліві значення менші, праві більші.

Складність

ОпераціяСередня
ПошукO(log n)
ВставкаO(log n)
ВидаленняO(log n)

9. Купа (Heap)

Зазвичай використовують Min Heap.

      1
     / \
    3   5

Операції

ОпераціяСкладність
Отримати мінімумO(1)
ВставкаO(log n)
Видалення мінімумуO(log n)

Типові задачі


10. Граф (Graph)

A --- B
|     |
C --- D

Представлення

Список суміжності

graph = {
    'A': ['B', 'C'],
    'B': ['A', 'D']
}

Обходи

Типові задачі


11. Trie

Для роботи з рядками.

      root
       |
       c
       |
       a
      / \
     t  r

Типові задачі

Складність

ОпераціяЧас
ВставкаO(L)
ПошукO(L)

де L — довжина слова.


12. Union-Find (Disjoint Set)

Відстежує групи елементів.

1 - 2 - 3

4 - 5

Операції

ОпераціяСкладність
Findмайже O(1)
Unionмайже O(1)

Типові задачі


13. Segment Tree

Для швидких запитів на відрізках.

Наприклад:

сума [2..8]
максимум [5..10]

Операції

ОпераціяСкладність
ЗапитO(log n)
ОновленняO(log n)

Мінімальний набір для 80% співбесід

Якщо часу мало, достатньо освоїти:

✅ Array ✅ HashMap ✅ Set ✅ Stack ✅ Queue ✅ Linked List ✅ Tree (DFS/BFS) ✅ Heap ✅ Graph (DFS/BFS)

Ці дев’ять структур покривають більшість задач на платформах на кшталт LeetCode, HackerRank та Codeforces.

Орієнтовний розподіл задач

СтруктураЧастка задач
Array + HashMap~40%
Tree~20%
Graph~15%
Stack/Queue~10%
Heap~10%
Інші~5%

Так. Насправді структур даних значно більше, ніж 24. Той список охоплює найвідоміші та найпрактичніші. Якщо враховувати академічні, спеціалізовані, розподілені, геометричні та ймовірнісні структури, їх можна нарахувати сотні.

Ось додаткові структури даних, яких не було в попередньому списку.

Лінійні структури


Черги та стеки


Дерева

Крім BST, AVL та Red-Black:


Купи (Heap)

Окрім звичайної Binary Heap:


Структури для рядків

Окрім Trie та Suffix Tree:


Структури для діапазонних запитів

Окрім Segment Tree та Fenwick Tree:


Геометричні структури

Окрім KD-Tree та QuadTree:


Ймовірнісні структури

Окрім Bloom Filter:


Графові структури


Структури для баз даних

Окрім B-Tree:


Конкурентні та розподілені структури


Функціональні (immutable) структури


Якщо говорити про фундаментальні структури, з яких будуються майже всі інші, то їх небагато:

  1. Масив (Array)
  2. Зв’язний список (Linked List)
  3. Хеш-таблиця (Hash Table)
  4. Дерево (Tree)
  5. Купа (Heap)
  6. Граф (Graph)
  7. Стек (Stack)
  8. Черга (Queue)

Близько 90% усіх інших структур — це модифікації, комбінації або оптимізації цих восьми базових ідей. Наприклад, Trie — це спеціалізоване дерево, HashSet — хеш-таблиця без значень, Priority Queue зазвичай реалізується через Heap, а B-Tree є різновидом дерева пошуку для дисків і баз даних.