7.2 KiB
Классификация структур данных
К распространенным структурам данных относятся массивы, списки, стеки, очереди, хеш-таблицы, деревья, кучи, графы. Их можно классифицировать по двум измерениям: логической структуре и физической структуре.
Логическая структура: линейная и нелинейная
Логическая структура раскрывает логические отношения между элементами данных. В массивах и списках данные расположены в определенном порядке, что отражает линейные отношения между данными. В деревьях данные расположены сверху вниз по уровням, что демонстрирует отношения «предок» и «потомок». Графы состоят из узлов и ребер, отражая сложные сетевые отношения.
Логические структуры делятся на две большие категории: линейные и нелинейные, как показано на рис. 3.1. Линейные структуры более интуитивно понятны, поскольку в них данные расположены линейно и логически связаны. Нелинейные структуры, наоборот, представляют собой нелинейное расположение элементов данных.
-
Линейные структуры данных: массивы, списки, стеки, очереди, хеш-таблицы, в которых элементы связаны последовательно один к одному.
-
Нелинейные структуры данных: деревья, кучи, графы, хеш-таблицы.
Нелинейные структуры данных можно дополнительно разделить на древовидные и сетевые.
-
Древовидные структуры: деревья, кучи, хеш-таблицы, в которых элементы связаны один ко многим.
-
Сетевые структуры: графы, в которых элементы связаны многие ко многим.
Физическая структура: непрерывная и разреженная
Во время выполнения программы обрабатываемые данные в основном хранятся в памяти. На рис. 3.2 изображен модуль оперативной памяти компьютера, где каждый черный чип содержит определенный участок памяти. Память можно представить как огромную таблицу Excel, где каждая ячейка может хранить данные определенного размера.
Система обращается к данным в целевой позиции через адреса памяти. Компьютер присваивает каждой ячейке таблицы номер по определенным правилам, чтобы обеспечить уникальный адрес памяти для каждого участка, как показано на рис. 3.2. Благодаря этим адресам программа может обращаться к данным в памяти.
!!! tip
Память является общим ресурсом для всех программ, и когда участок памяти занят одной программой, он обычно не может быть одновременно использован другими программами.
Поэтому в процессе проектирования структур данных и алгоритмов память занимает важное место. Например, пиковое использование памяти алгоритмом не должно превышать оставшуюся свободную память системы. Если не хватает непрерывных больших участков памяти, выбранная структура данных должна уметь располагаться в разреженных участках памяти.
Физическая структура отражает способ хранения данных в памяти компьютера и делится на хранение в непрерывном пространстве (массивы) и хранение в разреженном пространстве (списки), как показано на рис. 3.3. Физическая структура на низком уровне определяет методы доступа, обновления, добавления и удаления данных. Обе физические структуры демонстрируют взаимодополняющие характеристики в отношении временной и пространственной эффективности.
Следует отметить, что все структуры данных реализуются на основе массивов, связных списков или их комбинации. Например, стек и очередь можно реализовать как с использованием массивов, так и с использованием связных списков. Реализация хеш-таблицы может включать как массивы, так и связные списки.
-
На основе массивов можно реализовать: стек, очередь, хеш-таблицу, дерево, кучу, граф, матрицу, тензор (массив размерностью ≥ 3) и др.
-
На основе связных списков можно реализовать: стек, очередь, хеш-таблицу, дерево, кучу, граф и др.
Связный список после инициализации может изменять свою длину в процессе выполнения программы, поэтому его также называют динамической структурой данных. Массив после инициализации имеет неизменную длину, поэтому его называют статической структурой данных. Следует отметить, что массив может изменять свою длину путем перераспределения памяти, что придает ему определенную динамичность.


