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

Массивы (Arrays)

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

Связанный список (Linked List)

Описание: Связанный список - это структура данных, состоящая из узлов, каждый из которых содержит значение элемента и указатель на следующий узел в списке. Существуют односвязные списки, где каждый узел имеет указатель только на следующий узел, и двусвязные списки, где узлы имеют указатели на предыдущий и следующий узлы.

Преимущества:

  • Динамическое изменение размера списка (в отличие от массивов)
  • Эффективное добавление и удаление элементов в начале или конце списка
  • Относительно простая реализация

Недостатки:

  • Непостоянное время доступа к элементам (в отличие от массивов)
  • Больший объем занимаемой памяти по сравнению с массивами из-за хранения указателей на узлы

Применение: Связанные списки подходят для реализации стеков, очередей, а также для задач, где требуется частое добавление или удаление элементов и не требуется быстрый доступ к элементам по индексу.

Стэк(Stack)

Cтруктура данных, организованная по принципу "последний пришел, первый ушел" (LIFO). Элементы добавляются и удаляются с одного конца структуры.

Преимущества:

  • Простота реализации
  • Легкость использования в рекурсии и отката операций

Недостатки:

  • Ограниченный доступ к элементам (только к вершине стека)

Применение: Стеки полезны при выполнении рекурсивных функций, обработке скобочных последовательностей и отмене операций.

Очередь (Queue)

Структура данных, организованная по принципу "первый пришел, первый ушел" (FIFO). Элементы добавляются в конец очереди и удаляются из начала.

Преимущества:

  • Поддержка естественного порядка обработки элементов
  • Применение в алгоритмах обхода и поиска

Недостатки:

  • Ограниченный доступ к элементам (только к началу и концу очереди)

Применение: Очереди используются в алгоритмах обхода в ширину, приоритетных очередях и многопоточных приложениях для обработки задач.

Хэш-таблица (Hash Table)

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

Преимущества:

  • Быстрый доступ, вставка и удаление элементов (в среднем O(1))
  • Гибкость структуры

Недостатки:

  • Возможность коллизий хэш-функции
  • Затраты памяти на хранение элементов и обработку коллизий

Применение: Хэш-таблицы используются в поисковых алгоритмах, кэшировании данных, реализации ассоциативных массивов и словарей.

Граф (Graph)

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

Преимущества:

  • Отражение сложных отношений между элементами
  • Гибкость структуры

Недостатки:

  • Сложность реализации и обработки
  • Большие затраты памяти

Применение: Графы широко используются в транспортных сетях, социальных сетях, веб-технологиях и задачах оптимизации.

Дерево (Tree)

Иерархическая структура данных, состоящая из узлов, соединенных ребрами. У дерева есть корень и набор дочерних узлов, которые могут иметь свои дочерние узлы.

Преимущества:

  • Иерархическая структура данных
  • Быстрый поиск, вставка и удаление элементов (для сбалансированных деревьев)

Недостатки:

  • Сложность реализации и поддержания сбалансированности

Применение: Деревья используются в файловых системах, синтаксических анализаторах, базах данных и поисковых алгоритмах.

Двоичные кучи (Binary Heap)

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

Bit Arrays

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

Дополнительно: