## Introduzione alle Strutture Dati

Una _struttura dati_ è un modo in cui si possono organizzare i dati di un programma.

Si possono definire in due modi: **elementari** e **astratte**.

### Strutture dati elementari

Le strutture _elementari_  dipendono strettamente dal modo in cui vengono memorizzati i dati.

> **Array** e **liste** sono strutture dati elementari: sono definite dicendo come sono memorizzati i dati, rispettivamente, in celle contigue di memoria e da una serie di nodi con un valore e che puntano al successivo.

### Strutture dati astratte

Le strutture _astratte_ sono separate dal modo in cui vengono memorizzati i dati, sono più ad alto livello, e si definiscono descrivendo le **proprietà** della struttura e i **metodi** che su di essa possono essere effettuate.

> Una _classe_ in un qualsiasi linguaggio di programmazione è una struttura dati astratta.

> Una _pila_ astratta:
> - memorizza dati tutti dello stesso tipo
> - `pop()`, estrae dalla pila l'ultimo valore inserito
> - `push(val)`, aggiunge alla pila un valore
> - `top()`, permette di vedere l'ultimo valore inserito nella pila
> - `vuota()`, dice se la pila è vuota oppure no.