Коли програмісти говорять про "структури даних", на що вони мають на увазі?


18

Коли програмісти говорять про "структури даних", чи говорять вони лише про абстрактні типи даних, такі як списки , дерева , хеші , графіки тощо?

Або цей термін включає будь-яку структуру, що містить дані, такі як складові типи (об'єкти класу, структури, перерахунки тощо) та примітивні типи (булева, int, char тощо)?

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

Дивлячись навколо онлайн побачити інші місця , які відносяться до терміну «структурам даних» в сенсі програмування , як тільки з посиланням на абстрактні типи даних, такі як лекції з відділу Stony Brook університету інформатики , які держава

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

або це вікікнига про структури даних , яка використовує термін у таких реченнях:

Оскільки структури даних - це абстракції вищого рівня, вони представляють нам операції над групами даних, такі як додавання елемента до списку або пошук елемента з найвищим пріоритетом у черзі

То чому я коли-небудь чую програмістів, які посилаються на складні структури даних або абстрактні типи даних, коли вони використовують термін "структура даних"? Чи мають програмісти інше визначення терміна, ніж визначення словника?


1
Термін розвивався з часом. Натовп CS зазвичай використовує цей термін для загальних типів структур, які можуть містити кілька елементів пов'язаних даних (пов’язані списки, дерева тощо ...)
Одід

1
хіба це не просто термінологічна річ? рядок - це фактично масив символів, і це структура даних, яка представляє послідовність окремих характерів
Мітір

3
Хіба "структура даних" не є визначеним терміном? Це будь-яка структура для зберігання даних! Це важко сприймати питання серйозно.
Майкл К

1
@Rachel Отже, ваше питання полягає в тому, чи є примітивні типи даних структурою даних чи ні? if programmers mean something different when they talk about data structuresвсе ще опитується на думку.
янніс

2
"Первісний" повністю залежить від сфери застосування. Наприклад, на бінарному рівні не існує такого поняття, як int. На ще нижчому рівні немає навіть бітів - лише електричне зміщення. Знову ж таки, це термін, що визначає самовизначення - зовсім не добре питання.
Майкл К

Відповіді:


20

Узагальнене визначення "структури даних" - це все, що може утримувати ваші дані структуровано, так що так, це буде включати композиційні типи та примітивні типи на додаток до абстрактних типів даних. Наприклад, a string- це структура даних, оскільки вона може вміщувати послідовність символів структурованим чином.

Однак термін має і інше значення для програмістів.

Оскільки термін "структури даних" настільки широкий, розробники зазвичай використовують більш конкретний термін для ідентифікації того, про що вони говорять, наприклад, classабо data objectабо primitive type, а конкретний термін, використовуваний для найбільш складних або абстрактних типів даних, є "структура даних"

Ось чому ви чуєте "структуру даних", яка найчастіше використовується для абстрактних типів даних, таких як масиви, списки, дерева та хештелі, а не для таких речей, як примітивні типи даних


4
Я думаю, що графіки теж дуже поширені, але вони рідко представлені в стандартних бібліотеках, тому що їх дуже важко побудувати узагальнено та ефективно.
Клаїм

Отже, коли програмісти говорять про "структури даних", вони зазвичай говорять про абстрактні типи даних ? І хоча примітивні типи (такі як int, bool або char) та складові типи (наприклад, клас, структура чи enum) все ще вважаються структурами даних програмістами, вони зазвичай посилаються різними термінами?
Рейчел

1
@Rachel технічно структура даних може бути реалізованою в домашніх умовах, використовуючи також покажчики / класи. Я створив дуже некрасиві "структури даних", подібні до списків, як частина домашнього завдання C ++. Ми просто не називаємо структури даних класів так часто, тому що вони зазвичай щось більш конкретне.
Бен Брокка

@BenBrocka Ahhh, так що "структура даних" - це дуже широкий термін, який охоплює ці інші об'єкти, однак, як правило, краще бути більш конкретним, якщо говорити про структури даних та використовувати такі терміни, як "примітивний тип даних" або "об'єкт даних" замість "структура даних". І зазвичай використовується термін специфічні для таких об'єктів , як Lists, Trees, Graphsі т.д. просто буває «структури даних»
Рахіль

1
@Rachel так, хоча все є структурою даних (строго кажучи), термін "структура даних" зазвичай відноситься до цих абстрактних типів даних. Я б сказав, що термін "структура даних" з точки зору розробника стосується того, як він зберігає дані. Це може бути список пам'яті, файл на диску або може бути власна структура даних, яку він реалізував сам.
Олексій

5

Термін відноситься до обох, хоча такі речі , як intsі booleansзазвичай розглядаються примітивні типи даних (або примітивні структури даних). Сам термін просто стосується всього, що зберігає дані певним чином. Безумовно, intвідповідає цьому визначенню так само добре, як щось на зразок таблиці Hash, тільки це простіше.

Зазвичай, коли люди використовують структуру даних, вони посилаються на більш складні структури даних, а не простіші, але обидва відповідають визначенню.


2
Я не думаю, що я ніколи не чув, щоб хтось посилався на int"структуру даних".
Qwertie

2
@Qwertie мені ні, але це все-таки є. Частіше його називають "типом даних", але це означає те саме, що "структура даних"
Олексі

0

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

Отже, тип даних вказує тип даних, які ми зберегли в ньому. Це може бути ціле, десяткове, символьне, рядкове або об'єкт. Це можуть бути складові типи або примітивні типи на додаток до абстрактних типів даних.

Але ми використовуємо структури даних, коли хочемо зберегти будь-які складні дані в пам'яті. Це причина, чому ми чуємо лише про такі типи даних, як масиви, списки, дерева та хештелі, а не для таких речей, як примітивні типи даних

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.