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:
La rappresentazione, o definizione, del tipo e delle operazioni sono contenute in una singola unità sintattica.
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:
Una definizione di tipo che consente alle unità del programma di dichiarare variabili del tipo, ma nasconde la rappresentazione di queste variabili.
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:
Contiene elementi di dati componenti, che possono essere atomici o un'altra struttura di dati (ancora un dominio).
Una serie di operazioni su uno o più elementi del componente.
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.