Абстрактний тип даних та структура даних


32

Мені досить складно зрозуміти ці терміни. Я шукав у Google і читав трохи у Вікіпедії, але все ще не впевнений. Я визначив поки що:

Тип абстрактних даних - це визначення нового типу, описує його властивості та операції.

Структура даних - це реалізація ADT. Багато ADT можуть бути реалізовані як одна і та ж структура даних.

Якщо я вважаю правильно, масив як ADT означає сукупність елементів і як Структура даних, як він зберігається в пам'яті. Стек ADT з push, pop операціями, але чи можна сказати про структуру даних стека, якщо я маю на увазі, що я використовував стек, реалізований як масив у своєму алгоритмі? І чому купа не ADT? Він може бути реалізований у вигляді дерева або масиву.


3
Спочатку ви можете прочитати, в чому різниця між масивом і стеком?
chrisaycock


Відповіді:


24

Простіше кажучи, ADT (абстрактний тип даних) є скоріше логічним описом, тоді як структура даних є конкретною.

Подумайте про ADT як про зображення даних та про операції з їх маніпулювання та зміни.

Структура даних - це реальна, конкретна річ . Він може бути реалізований і використаний в алгоритмі.


але я також можу реалізувати Stack and Queue (це ADT) всередині алгоритму. ні?
FedericoCapaldo

Стек і черга - це логічні уявлення із конкретними значеннями інформатики. Однак реалізація черги в C #, Java, Go або [назвіть свою мову] буде дещо іншою. Черга - концепція ADT, черга Java - структура даних. Те саме з реалізацією стека C #.
Берін Лорич

53

ADT - це інтерфейс ( що він робить ), яка структура даних для класу ( як це робить ).

Кілька прикладів:

ADT: List
DS:  ArrayList, LinkedList...

ADT: Map
DS:  HashMap, TreeMap...

Я думаю, ви розумієте.


ADT можна сказати як загальний тип структури даних?
Owais Qureshi

1
Це має бути помічена відповідь. Не можна було сказати простішого для мирян.
deppfx

дякую @dagnelies за просту та ефективну відповідь. Це слід позначити як відповідь.
Сарун Великобританія

1
Не знаю чому , але я віддаю перевагу невелику перебудову в формулюваннях тут: ADT is to a Data Structure, what an Interface (what it does) is to a Class (how it does it). Приклади - це місце.
Депутат Адітія

10

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

Основна відмінність між абстрактним типом даних (ADT) і конкретним типом даних полягає в тому, що останні дозволяють нам подивитися на конкретні уявлення, тоді як перші приховують представлення від нас. ADT може бути чистим ADT або оновленим ADT. Чистий ADT - це той, де всі операції є чистими функціями. Це означає, що операції не мають побічних ефектів. Зокрема, вони не змінюють та не оновлюють там вхідні аргументи. Вони просто використовують ці аргументи для отримання результатів, які є свіжими значеннями ADT (або інших типів). Більшість типів бетону є чистими. Наприклад, жодна операція над цілими числами фактично не змінює ціле число. Натомість усі операції, такі як "+", дають нові результати.

Оновлений ADT - це той, де деякі операції фактично змінюють значення ADT. Наприклад, припустимо, що у нас була операція під назвою "pop", яка взяла стек як аргумент та змінила її. ("На місці", "руйнівно"), видаливши найвищий пріоритетний пункт. Ця операція вважатиметься нечистою, і вся АДТ тоді була б також нечистою. ADT може бути визначений користувачем ADT.

Ми знаємо, що абстрактний тип даних - це тип даних, який задовольняє наступним двом умовам:

  1. Представлення або визначення типу та операцій містяться в одній синтаксичній одиниці.

  2. Представлення об'єктів типу приховано від програмних одиниць, які використовують тип, тому лише ті прямі операції, які можливі на цих об'єктах, є тими, що передбачені у визначенні типу.

Визначений користувачем абстрактний тип даних повинен містити:

  1. Визначення типу, яке дозволяє програмним підрозділам оголошувати змінні типу, але приховує подання цих змінних.

  2. Сукупність операцій по маніпулюванню об'єктами типу.

Прикладом визначеного користувачем абстрактного типу даних є структура. 'C' забезпечує чотири основні типи: int, char, float та double. Однак 'C' також надає програмісту можливість визначати свої власні типи. Структура - один із таких прикладів. Структура - це сукупність різних частин, де кожна частина має деякий існуючий тип.

struct abc

{int x;

float y;

};

Вищеописане визначення структури не створює змінних, а створює новий тип. Змінні цього типу можуть створюватися аналогічно змінним вбудованого типу.

struct abc a;

Ключове слово typedef дозволяє нам створювати нові імена типів для наших нових типів.

Наприклад:

typedef struct abc AB;

де AB - це нове ім'я типу, яке тепер можна використовувати для створення нових типів.

AB b;

Структури даних: Характерні особливості структур даних:

  1. Він містить елементи даних компонентів, які можуть бути атомними або іншою структурою даних (все ще домен).

  2. Набір операцій над одним або кількома компонентами.

  3. Визначає правила того, як компоненти стосуються один одного та до структури в цілому (твердження).

Структури даних:

Структура даних може бути статичною або динамічною. Статична структура даних має фіксований розмір. Це значення відрізняється від значення статичного модифікатора. Масиви статичні; як тільки ми визначимо кількість елементів, які він може містити, число не змінюється. Динамічна структура даних зростає та скорочується під час виконання відповідно до її вмісту. Динамічна структура даних реалізується за допомогою посилань.

Структури даних можна додатково класифікувати на лінійні структури даних та нелінійні структури даних. У лінійних структурах даних кожен компонент має унікального попередника та наступника, за винятком першого та останнього елементів, тоді як у випадку нелінійних структур даних такого обмеження немає, оскільки елементи можуть бути впорядковані у будь-який бажаний спосіб, обмежений способом, який ми використовуємо представляють такі типи.


0

Перш за все, термінології в структурах даних можуть бути дуже заплутаними.

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

Тепер все інше, що реалізує це вище ADT, - це структура даних (DS) , структура даних - це реальні речі, які ви реалізуєте у своїх проблемах і знаходите всередині бібліотек. Що стосується словника, ви можете його реалізувати за допомогою списку Array або Linked.

Я думаю, що справжня плутанина виникає, коли хтось називає свій DS як ADT, наприклад, деякі люди називатимуть вищезгаданий DS як «Словник» замість DictImplementation, що цілком законно, це просто викликає певну плутанину.

Посилання: Скіна: Посібник з розробки алгоритму

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