Различия между статическими и динамическими структурами данных

каковы основные различия, преимущества и недостатки статических и динамических структур данных?

к каким категориям относятся наиболее распространенные структуры данных?

Как я мог знать, в какой ситуации использовать каждый?

4 ответов


для начала упрощение:

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

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

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

  • Static должен быть известен максимальный размер заранее, в то время как dynamic может адаптироваться на лету
  • Static не перераспределяет память независимо от того, что, так что вы можете иметь гарантированные требования к памяти

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

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

Итак, резюмируем:

  1. Если вам нужна гарантия на максимальное использование памяти, у вас нет выбора, кроме массива.
  2. если у вас есть жесткое ограничение сверху на размер данных, рассмотрите возможность использования массива. Массивы могут быть хорошо подходят для проблем, которые в основном требуют операций добавления/удаления (сохранить массив несортированным) и для тех, которые в основном требуют операций поиска (сохранить массив отсортированным), но не для обоих одновременно время.
  3. если у вас нет жесткого верхнего предела, или если вы требуете, чтобы все add/remove/find были быстрыми, используйте соответствующий вид динамической структуры.

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


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

SDS-это линейные структуры данных, которые обеспечивают быстрый доступ к элементам, хранящимся в них, но операции вставки/удаления дороги по сравнению с DDS, где доступ к элементам медленнее, но вставка / удаление происходит быстрее.

большинство DS являются динамическими DS.

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


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


простые советы

динамические структуры данных имеют следующие характеристики:

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

статические структуры данных имеют следующие характеристики:

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

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