Tipo di dati astratto e struttura dei dati


32

È abbastanza difficile per me capire questi termini. Ho cercato su Google e letto un po 'su Wikipedia, ma non sono ancora sicuro. Ho determinato finora che:

Abstract Data Type è una definizione di nuovo tipo, descrive le sue proprietà e operazioni.

La struttura dei dati è un'implementazione di ADT. Molti ADT possono essere implementati come la stessa struttura dati.

Se penso bene, array come ADT significa una raccolta di elementi e come Struttura dei dati, come viene archiviato in una memoria. Lo stack è ADT con operazioni push, pop, ma possiamo dire della struttura dei dati dello stack se intendo dire che ho usato lo stack implementato come array nel mio algoritmo? E perché heap non è ADT? Può essere implementato come albero o un array.




Risposte:


24

In poche parole, un ADT (tipo di dati astratto) è più una descrizione logica, mentre una struttura di dati è concreta.

Pensa a un ADT come un'immagine dei dati e delle operazioni per manipolarli e modificarli.

Una struttura di dati è la cosa reale, concreta . Può essere implementato e utilizzato all'interno di un algoritmo.


ma posso implementare anche Stack e Queue (che sono ADT) all'interno di un algoritmo. no?
Federico

Stack e Queue sono rappresentazioni logiche con significati specifici di informatica. Tuttavia, l'implementazione di una coda in C #, Java, Go o [name your language] sarà leggermente diversa. Coda il concetto è ADT, la coda Java è una struttura dati. Lo stesso con l'implementazione dello stack C #.
Berin Loritsch,

53

ADT è per un'interfaccia ( cosa fa ) ciò che una struttura di dati è per una classe ( come lo fa ).

Alcuni esempi:

ADT: List
DS:  ArrayList, LinkedList...

ADT: Map
DS:  HashMap, TreeMap...

Immagino che tu capisca il punto.


ADT può essere definito come il tipo generale di una struttura di dati?
Owais Qureshi,

1
Questa dovrebbe essere la risposta contrassegnata. Non si sarebbe potuto dire più semplice per i non addetti ai lavori.
deppfx,

grazie @dagnelies per la risposta semplice ed efficace. Questo dovrebbe essere contrassegnato come risposta.
Sarun, Regno Unito,

1
Non so perché, ma io preferisco un piccolo riassetto nella formulazione qui: ADT is to a Data Structure, what an Interface (what it does) is to a Class (how it does it). Gli esempi sono chiari.
Aditya MP

10

Tipo di dati astratto: ADT può essere definito come un insieme di valori di dati e operazioni associate che sono specificati con precisione indipendentemente da una particolare implementazione. Pertanto, un tipo di dati astratto è una raccolta organizzata di informazioni e un insieme di operazioni utilizzate per gestirle. L'insieme delle operazioni definisce l'interfaccia dell'ADT. Finché l'ADT soddisfa le condizioni dell'interfaccia, non importa in che modo sia implementato l'ADT. Poiché, in ADT, i valori e le operazioni dei dati sono definiti con precisione matematica, anziché come un'implementazione in un linguaggio informatico, possiamo ragionare sugli effetti delle operazioni, sulle relazioni con altri tipi di dati astratti se un programma implementa il tipo di dati ecc.

La differenza fondamentale tra tipo di dati astratti (ADT) e tipo di dati concreti è che questi ultimi ci consentono di guardare alla rappresentazione concreta, mentre i primi ci nascondono la rappresentazione. Un ADT può essere ADT puro o ADT aggiornabile. Un ADT puro è uno in cui tutte le operazioni sono funzioni pure. Ciò significa che le operazioni non hanno effetti collaterali. In particolare, non modificano né aggiornano lì argomenti di input. Usano semplicemente questi argomenti per generare output, che sono nuovi valori di ADT (o di altri tipi). La maggior parte dei tipi concreti sono puri. Ad esempio, nessuna operazione su numeri interi modifica effettivamente un numero intero. Invece, tutte le operazioni come '+' producono nuovi output.

Un ADT aggiornabile è quello in cui alcune operazioni cambiano effettivamente i valori dell'ADT. Ad esempio, supponiamo di avere un'operazione chiamata 'pop' che ha preso uno stack come argomento e lo ha modificato. ("Sul posto", "distruttivo") rimuovendo l'elemento con la massima priorità. Questa operazione sarebbe considerata impura e l'intero ADT sarebbe quindi anche impuro. Un ADT può essere ADT definito dall'utente.

Sappiamo che un tipo di dati astratto è un tipo di dati che soddisfa le seguenti due condizioni:

  1. La rappresentazione, o definizione, del tipo e delle operazioni sono contenute in una singola unità sintattica.

  2. La rappresentazione di oggetti del tipo è nascosta dalle unità del programma che usano il tipo, quindi solo le operazioni dirette possibili su tali oggetti sono quelle fornite nella definizione del tipo.

Un tipo di dati astratto definito dall'utente dovrebbe fornire:

  1. Una definizione di tipo che consente alle unità del programma di dichiarare variabili del tipo, ma nasconde la rappresentazione di queste variabili.

  2. Un insieme di operazioni per manipolare oggetti del tipo.

Un esempio di un tipo di dati astratto definito dall'utente è la struttura. 'C' fornisce quattro tipi di base: int, char, float e double. Tuttavia, "C" fornisce anche al programmatore la possibilità di definire i propri tipi. La struttura ne è un esempio. Una struttura è un aggregato di parti diverse, in cui ogni parte è di un tipo esistente.

struct abc

{int x;

float y;

};

La definizione della struttura sopra non crea alcuna variabile, ma crea un nuovo tipo. Le variabili di questo tipo possono essere create in modo simile alle variabili di un tipo incorporato.

struct abc a;

La parola chiave typedef ci consente di creare nuovi nomi di tipi per i nostri nuovi tipi.

Per esempio:

typedef struct abc AB;

dove AB è un nuovo nome di tipo che ora può essere utilizzato per creare nuovi tipi.

AB b;

Strutture di dati: le seguenti sono le caratteristiche delle strutture di dati:

  1. Contiene elementi di dati componenti, che possono essere atomici o un'altra struttura di dati (ancora un dominio).

  2. Una serie di operazioni su uno o più elementi del componente.

  3. Definisce le regole su come i componenti si relazionano tra loro e con la struttura nel suo insieme (asserzioni).

Strutture dati:

Una struttura di dati può essere statica o dinamica. Una struttura di dati statici ha una dimensione fissa. Questo significato è diverso dal significato di modificatore statico. Le matrici sono statiche; una volta definito il numero di elementi che può contenere, il numero non cambia. Una struttura di dati dinamica cresce e si restringe al momento dell'esecuzione, come richiesto dal suo contenuto. Una struttura di dati dinamica viene implementata utilizzando i collegamenti.

Le strutture di dati possono essere ulteriormente classificate in strutture di dati lineari e strutture di dati non lineari. Nelle strutture di dati lineari ogni componente ha un predecessore e un successore unici, ad eccezione del primo e dell'ultimo elemento, mentre nel caso di strutture di dati non lineari non esiste alcuna limitazione in quanto gli elementi possono essere disposti in qualsiasi modo desiderato limitato dal modo in cui usiamo rappresentano tali tipi.


0

Innanzitutto, le terminologie nelle strutture dati possono essere molto confuse.

L'ADT è come una teoria, un modello o una linea guida, ecc., Che spiega come dovrebbe comportarsi una struttura di dati, che tipo di operazioni dovrebbe supportare, ecc. Tre tipi di dati astratti fondamentali sono contenitori, dizionari e code prioritarie. Ad esempio dizionario, ci dice che ogni struttura di dati che implementa questo dizionario ADT deve supportare coppie chiave-valore, ricerca basata su chiavi, inserimento di elementi, ricerca successore e predecessore di una determinata chiave ecc.

Ora tutto il resto che implementa questo sopra ADT è la struttura dei dati (DS) , la struttura dei dati sono cose reali che implementate nei vostri problemi e trovate all'interno delle librerie. In caso di dizionario, è possibile scegliere di implementarlo tramite array o elenco collegato.

Penso che si verifichi vera confusione quando qualcuno nomina il proprio DS come ADT, ad esempio alcune persone chiameranno il loro DS sopra menzionato come "Dizionario" invece di DictImplementation che è perfettamente legale, causa solo un po 'di confusione.

Rif: Skiena: il manuale di progettazione dell'algoritmo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.