Когда программисты говорят о «структурах данных», на что они ссылаются?

18

Когда программисты говорят о «структурах данных», они говорят только об абстрактных типах данных, таких как списки , деревья , хеши , графики и т. Д.?

Или этот термин включает любую структуру, которая содержит данные, такие как составные типы (объекты классов, структуры, перечисления и т. Д.) И примитивные типы (логические, int, char и т. Д.)?

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

Глядя вокруг онлайн увидеть другие места , которые относятся к термину «структурам данных» в смысле программирования , как только со ссылкой на абстрактные типы данных, такие как лекции из отдела Stony Brook университета информатики , которые государство

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

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

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

Так почему же я слышу, как программисты ссылаются на сложные структуры данных или абстрактные типы данных, когда они используют термин «структура данных»? У программистов есть другое определение термина, чем определение словаря?

Рейчел
источник
1
Термин развивался с течением времени. Толпа CS обычно использует термин для общих типов структур, которые могут содержать несколько элементов связанных данных (связанные списки, деревья и т. Д.)
Одед
1
разве это не просто терминология? строка на самом деле является массивом символов, и это структура данных, которая представляет собой последовательность отдельных символов
Mithir
3
Разве «структура данных» не является самоопределенным термином? Это любая структура для хранения данных! Трудно отнестись к этому вопросу серьезно.
Майкл К
1
@Rachel Итак, ваш вопрос на самом деле, являются ли примитивные типы данных структурами данных или нет? if programmers mean something different when they talk about data structuresвсе еще голосует за мнения все же.
Яннис
2
«Примитив» полностью зависит от сферы применения. Например, на двоичном уровне нет такого понятия, как int. На еще более низком уровне нет даже битов - просто электрический уклон. Опять же, это самоопределение - не очень хороший вопрос.
Майкл К

Ответы:

20

Общее определение «структуры данных» - это все, что может содержать ваши данные в структурированном виде, так что да, это будет включать составные типы и примитивные типы в дополнение к абстрактным типам данных. Например, a string- это структура данных, поскольку она может содержать последовательность символов в структурированном виде.

Тем не менее, этот термин также имеет другое значение для программистов.

Поскольку термин «структуры данных» очень широк, разработчики обычно используют более конкретный термин для определения того, о чем они говорят, например, classили data objectили primitive type, а конкретный термин, используемый для большинства сложных или абстрактных типов данных, - «структура данных».

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

Alex
источник
4
Я думаю, что графики тоже очень распространены, но они просто редко представлены в стандартных библиотеках, потому что их очень сложно создать универсальным и эффективным способом.
Клаим
Итак, когда программисты говорят о «структурах данных», они обычно говорят об абстрактных типах данных ? И хотя примитивные типы (такие как int, bool или char) и составные типы (такие как класс, структура или перечисление) все еще считаются структурами данных программистами, на них обычно ссылаются разные термины?
Рэйчел
1
@Rachel технически структура данных может быть самодельной реализацией с использованием указателей / классов и т. Д. Я сделал несколько очень уродливых «структур данных», похожих на списки, как часть домашнего задания C ++. Мы просто не называем структуры данных классов так часто, потому что они обычно являются чем-то более конкретным.
Бен Брока
@BenBrocka Аааа, так что «структура данных» - это очень широкий термин, который охватывает эти другие объекты, однако обычно лучше быть более конкретным, когда речь идет о структурах данных, и использовать такие термины, как «примитивный тип данных» или «объект данных» вместо "структура данных". И часто используемый конкретный термин для таких объектов, как Lists, Treesи Graphsт. Д. Просто «структуры данных»
Рэйчел
1
@ Рейчел: да, даже если все является структурой данных (строго говоря), термин «структура данных» обычно относится к этим абстрактным типам данных. Я бы сказал, что термин «структура данных» с точки зрения разработчика относится к тому, как он хранит данные. Это может быть список в памяти, файл на диске или пользовательская структура данных, которую он сам реализовал.
Алекс
5

Термин относится к обоим, хотя такие вещи, как intsи booleansобычно рассматриваются как примитивные типы данных (или примитивные структуры данных). Сам термин просто относится ко всему, что хранит данные определенным образом. Конечно, intсоответствует этому определению так же, как что-то вроде хэш-таблицы, только это проще.

Как правило, когда люди используют структуру данных, они ссылаются на более сложные структуры данных, а не на более простые, но оба соответствуют определению.

Oleksi
источник
2
Я не думаю, что когда-либо слышал, чтобы кто-то называл это int«структурой данных».
Qwertie
2
@ Да и мне тоже, но это все еще так. Его чаще называют «типом данных», но это в значительной степени означает то же самое, что и «структура данных»
Oleksi
0

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

Итак, тип данных сообщает тип данных, которые мы сохранили в нем. Это может быть целое число, десятичное число, символ, строка или объект. Это могут быть составные типы или примитивные типы в дополнение к абстрактным типам данных.

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

Нишант Сетхи
источник