Автор оригинала: FreeCodeCapm Team.
Fahim UL HAQ
Никлаус Вирт, швейцарский компьютерный ученый, написал книгу в 1976 году под названием Алгоритмы + данные.
40+ лет спустя, это уравнение все еще имеет правду. Вот почему кандидаты на разработке программного обеспечения должны продемонстрировать свое понимание структур данных вместе с их приложениями.
Почти все проблемы требуют, чтобы кандидата продемонстрировал глубокое понимание структур данных. Неважно, только что закончил (от университета или кодирования Bootcamp), или у вас есть десятилетия опыта.
Иногда вопросы интервью явно упоминают структуру данных, например, «Учитывая двоичное дерево». В других случаях это неявно, как «мы хотим отслеживать количество книг, связанных с каждым автором».
Структуры данных обучения необходимы, даже если вы просто пытаетесь поправиться на вашей текущей работе. Давайте начнем с понимания оснований.
Что такое структура данных?
Проще говоря, структура данных – это контейнер, который хранит данные в определенной макете. Этот «макет» позволяет эффективной структурой данных в некоторых операциях и неэффективных в других. Ваша цель – понять структуры данных, чтобы вы могли выбрать структуру данных, которая наиболее оптимальной для проблемы под рукой.
Почему нам нужны структуры данных?
Поскольку структуры данных используются для хранения данных в организованной форме, и поскольку данные являются наиболее важнейшей организацией в информатике, истинная ценность структур данных ясна.
Независимо от того, какую проблему вы решаете, так или иначе вы должны иметь дело с данными – будь то зарплата сотрудника, цены на акции, список продуктов питания или даже простой телефонный справочник.
На основании разных сценариев данных необходимо хранить в определенном формате. У нас есть горстка структур данных, которые охватывают нашу необходимость хранения данных в разных форматах.
Обычно используемые структуры данных
Давайте сначала перечислить наиболее часто используемые структуры данных, а затем мы покрываем их один за другим:
- Массива
- Стеки
- Очередь
- Связанные списки
- Деревья
- Графики
- Пытается (они эффективно деревьев, но все равно приятно называть их отдельно).
- Хэш таблицы
Массива
Массив является самым простым и широко используемым структурой данных. Другие структуры данных, такие как стеки и очереди, получены из массивов.
Вот изображение простого массива размера 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 Комплексная дорожная карта для подготовки к кодированию интервью Отказ
Удачи и счастливое обучение!:)