Рубрики
Без рубрики

Основные структуры данных, которые вы должны знать для вашего следующего собеседования кодирования

Автор оригинала: FreeCodeCapm Team.

Fahim UL HAQ

Никлаус Вирт, швейцарский компьютерный ученый, написал книгу в 1976 году под названием Алгоритмы + данные.

40+ лет спустя, это уравнение все еще имеет правду. Вот почему кандидаты на разработке программного обеспечения должны продемонстрировать свое понимание структур данных вместе с их приложениями.

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

Иногда вопросы интервью явно упоминают структуру данных, например, «Учитывая двоичное дерево». В других случаях это неявно, как «мы хотим отслеживать количество книг, связанных с каждым автором».

Структуры данных обучения необходимы, даже если вы просто пытаетесь поправиться на вашей текущей работе. Давайте начнем с понимания оснований.

Что такое структура данных?

Проще говоря, структура данных – это контейнер, который хранит данные в определенной макете. Этот «макет» позволяет эффективной структурой данных в некоторых операциях и неэффективных в других. Ваша цель – понять структуры данных, чтобы вы могли выбрать структуру данных, которая наиболее оптимальной для проблемы под рукой.

Почему нам нужны структуры данных?

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

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

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

Обычно используемые структуры данных

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

  1. Массива
  2. Стеки
  3. Очередь
  4. Связанные списки
  5. Деревья
  6. Графики
  7. Пытается (они эффективно деревьев, но все равно приятно называть их отдельно).
  8. Хэш таблицы

Массива

Массив является самым простым и широко используемым структурой данных. Другие структуры данных, такие как стеки и очереди, получены из массивов.

Вот изображение простого массива размера 4, содержащее элементы (1, 2, 3 и 4).

Каждый элемент данных присваивается положительное числовое значение, называемое Индекс , который соответствует позиции этого элемента в массиве. Большинство языков определяют начальный индекс массива как 0.

Ниже приведены два типа массивов:

  • Одномерные массивы (как показано выше)
  • Многомерные массивы (массивы в массивах)

Основные операции по массивам

  • Вставить – вставляет элемент в данный индекс
  • Get – возвращает элемент в данный индекс
  • Удалить – удаляет элемент в данном индексе
  • Размер – получает общее количество элементов в массиве

Обычно задаваемые вопросы интервью на массиве

  • Найти второй минимальный элемент массива
  • Первые не повторяющиеся целые числа в массиве
  • Объединить две отсортированные массивы
  • Переставить положительные и отрицательные значения в массиве

Стеки

Мы все знакомы со знаменитым Отменить Вариант, который присутствует практически во всех приложении. Вы когда-нибудь задавались вопросом, как это работает? Идея: вы храните предыдущие состояния вашей работы (которые ограничены конкретным числом) в памяти в таком порядке, что последний появляется первым. Это не может быть сделано, просто используя массивы. Вот где стек пригодится.

Реальный пример стека может быть куча книг, помещенных в вертикальном порядке. Чтобы получить книгу, которая где-то посередине, вам нужно будет удалить все книги, размещенные на нем. Это как работает метод Lifo (последний в первом выходе).

Вот изображение стека, содержащего три элемента данных (1, 2 и 3), где 3 находится на вершине и будет удалена первым:

Основные операции стека:

  • Нажмите – вставляет элемент вверху
  • POP – возвращает верхний элемент после удаления из стека
  • isuppy – возвращает true, если стек пуст
  • Верхний – возвращает верхний элемент, не удаляя из стека

Обычно задают вопросы собеседования

  • Оцените выражение постфикса с использованием стека
  • Сортировать значения в стеке
  • Проверьте сбалансированные скобки в выражении

Очередь

Подобно стеку, очередь – это еще одна линейная структура данных, которая хранит элемент последовательно. Единственным существенным различием между стеком и очередь является то, что вместо того, чтобы использовать метод LIFO, очередь реализует FIFO Метод, который коротко для первого в первую очередь.

Идеальный реальный пример очереди: линия людей, ожидающих в билетной будке. Если приходит новый человек, они присоединятся к линии с конца, а не от начала – и лицо, стоящее на фронте, будет первым, кто получил билет и, следовательно, покинуть линию.

Вот образ очереди, содержащий четыре элемента данных (1, 2, 3 и 4), где 1 находится сверху и будет удален первым:

Основные операции очереди

  • Enqueue () – вставляет элемент до конца очереди
  • Dequeue () – удаляет элемент с начала очереди
  • isuppy () – возвращает true, если очередь пуста
  • Top () – возвращает первый элемент очереди

Обычно спросил вопросы интервью в очереди

  • Внедрить стек с помощью очереди
  • Обратный первый K элементы очереди
  • Генерировать двоичные числа от 1 до n с использованием очереди

Связанный список

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

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

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

Вот визуальное представление внутренней структуры связанного списка:

Ниже приведены типы связанных списков:

  • Одно связанный список (однонаправленный)
  • Вдвойне связанный список (двунаправленные)

Основные операции связанного списка:

  • InserateND – Вставляет данный элемент в конце связанного списка
  • Inserathead – Вставляет данный элемент в начале/главе связанного списка
  • Удалить – Удаляет данный элемент из связанного списка
  • Delategead – Удаляет первый элемент связанного списка
  • Поиск – возвращает данный элемент из связанного списка
  • ushumpy – возвращает true, если связанный список пуст

Обычно просят связанные вопросы собеседования

  • Обратный связанный список
  • Обнаружить цикл в связанном списке
  • Вернуть NT-узел из конца в связанном списке
  • Удалить дубликаты из связанного списка

Графики

График – это набор узлов, которые связаны друг с другом в форме сети. Узлы также называют вершинами. А Пара (x, y) называется край , что указывает на то, что вершина х подключен к вершине y Отказ Край может содержать вес/затраты, показывая, сколько стоимости требуется для прохождения вершины x к y Отказ

Типы графов:

  • Незапряженный график
  • Направленный график

На языке программирования графики могут быть представлены с использованием двух форм:

  • Матрица соседних
  • Список соседних

Общие алгоритмы пересечения графика:

  • ПЕРВЫЙ ПОИСК ПО ИЩЕТ
  • Глубина первый поиск

Обычно задаваемые вопросы собеседования графов

  • Реализовать ширину и глубину сначала поиск
  • Проверьте, является ли график деревом или нет
  • Подсчитайте количество ребер в графике
  • Найдите кратчайший путь между двумя вершинами

Деревья

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

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

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

Ниже приведены типы деревьев:

  • N-ary дерево
  • Сбалансированное дерево
  • Бинарное дерево
  • Двоичное дерево поиска
  • AVL Tree
  • Красное черное дерево
  • 2-3 дерева

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

Обычно задаваемые вопросы Tree интервью

  • Найти высоту бинарного дерева
  • Найти максимальное значение Kth в двоичном дереве поиска
  • Найти узлы на расстоянии “k” от корня
  • Найти предки данного узла в бинарном дереве

Три

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

Вот иллюстрация того, как три слова «топ», «таким образом» и «их» хранятся в Три:

Слова хранятся в верхней части до нижней части, когда зеленые цветные узлы «P», «S» и «R» указывают конец «верхнего», «таким образом» и «их» соответственно.

Обычно спросил вопросы Trie интервью:

  • Подсчитать общее количество слов в Трении
  • Распечатать все слова, хранящиеся в TRIE
  • Сортировать элементы массива, используя TRIE
  • Формируйте слова из словаря, используя TRIE
  • Построить словарь T9

Хеш-таблица

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

Хэш-таблицы обычно реализуются с использованием массивов.

Выполнение структуры данных хеширования зависит от этих трех факторов:

  • Хаш-функция
  • Размер хэш таблицы
  • Метод обработки столкновений

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

Обычно задаваемые вопросы охватывания интервью

  • Найти симметричные пары в массиве
  • Трассировать полный путь путешествия
  • Найти, если массив является подмножеством другого массива
  • Проверьте, если заданные массивы несерьезно

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

Если вы ищете ресурсы на структурах данных для кодирования интервью, посмотрите на курсы Interactive & Challenge: Структуры данных для кодирования интервью ( Питон , Ява , или же Javascript ).

Для более продвинутых вопросов посмотрите на CODERUST 3.0: Быстрое кодирование собеседования подготовки с интерактивными проблемами и визуализациями .

Если вы готовитесь к интервью программного обеспечения, вот A Комплексная дорожная карта для подготовки к кодированию интервью Отказ

Удачи и счастливое обучение!:)