Corso di informatica Athena – Periti Informatici

Corso di informatica Athena – Periti Informatici
Liste
Code e Pile!
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici

In informatica, una lista
concatenata (o linked list) è una
delle strutture dati fondamentali usate
nellaprogrammazione. Essa consiste di
una sequenza di nodi, ognuno
contenente campi di dati arbitrari ed uno o
due riferimenti ("link") che puntano al nodo
successivo e/o precedente.
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Il modo più semplice di creare una lista è
una lista semplicemente concatenata,
che utilizza un collegamento per nodo.
 Questo collegamento punta al nodo
successivo della lista o a un valore nullo.

Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Un tipo più sofisticato di lista è una lista
doppiamente concatenata o lista
concatenata a due vie.
 Ogni nodo possiede due collegamenti: uno
punta al nodo precedente o ad un valore
nullo se è il primo nodo;
 l'altro punta al nodo successivo o ad un
valore nullo se è il nodo finale.

Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Le liste concatenate hanno vari vantaggi nei
confronti degli array:
Gli elementi possono essere inseriti nelle
liste indefinitamente;
 Le operazioni di inserimento e
cancellazione sono molto più veloci.

Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Però presentano anche alcuni svantaggi
rispetto agli array:
Mentre gli array permettono un accesso
casuale, le liste concatenate permettono
soltanto un accesso sequenziale agli
elementi ;
 Nelle liste concatenate viene usato più
spazio per memorizzare i riferimenti agli
elementi successivi (e precedenti).

Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
typedef struct ns {
int data;
struct ns* next;
} node;
Docente: Daniele Prevedello
int o
qualunque
altro tipo
semplice o
complesso
(array o altra
struttura)
Corso di informatica Athena – Periti Informatici
Inserimento
node *list_add(node** p, int i) {
node *n = (node*)malloc(sizeof(node));
n->next = *p;
*p = n;
n->data = i;
return n;
}
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Cancellazione
void list_remove(node** p) { /* rimuove head */
if (*p != NULL) {
node *n = *p;
*p = (*p)->next;
free(n);
}
}
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Ricerca
node** list_search(node** n, int i) {
while (*n != NULL) {
if ((*n)->data == i) {
return n;
}
n = &(*n)->next;
}
return NULL;
}
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Scorrimento
void list_print(node* n) {
if (n == NULL) {
printf("la lista è vuota\n");
}
while (n != NULL) {
printf("print %p %p %d\n", n, n->next, n->data);
n = n->next;
}
}
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
int main(void) {
node *n = NULL;
list_add(&n, 0); /* lista: 0 */
list_add(&n, 1); /* lista: 1 0 */
list_add(&n, 2); /* lista: 2 1 0 */
list_add(&n, 3); /* lista: 3 2 1 0 */
list_add(&n, 4); /* lista: 4 3 2 1 0 */
list_print(n);
list_remove(&n); /* rimuove il primo elemento (4) */
list_remove(&n->next); /* rimuove il nuovo secondo (2) */
list_remove(list_search(&n, 1)); /* rimuove la cella che contiene 1 (primo) */
list_remove(&n->next); /* rimuove il successivo (0) */
list_remove(&n); /* rimuove l'ultimo (3) */
list_print(n);
return 0;
}
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Code
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
In Informatica per coda si intende una
struttura dati di tipo FIFO,
First In First Out (il primo in ingresso è il
primo ad uscire).
 Un esempio pratico sono le code che in un
paese civile si fanno per ottenere un
servizio, come pagare al supermercato o
farsi tagliare i capelli dal parrucchiere:
idealmente si viene serviti nello stesso
ordine con cui ci si è presentati.

Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Operazioni su una coda:

Accodamento di un elemento
 Detta
anche operazione di enqueue, serve a
mettere un elemento in coda.

Estrazione di un elemento
 Detta
anche operazione di dequeue, serve a
rimuovere un elemento dalla testa della coda.
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici





Per implementare una coda viene utilizzato
normalmente una lista concatenata.
Ogni elemento della lista è un elemento della
coda. Inoltre, viene conservata la testa coda
come un puntatore.
L'operazione di accodamento consiste nella
normale operazione di inserimento di un
elemento nella lista.
L'operazione di estrazione consiste nel sostituire
il puntatore che conserva la testa della coda con
il secondo elemento della coda.
È possibile inoltre utilizzare un array che può
essere trattato come array circolare.
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Pile o
Stack
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici

In informatica, il termine stack o pila viene
usato per riferirsi a strutture dati le cui
modalità d'accesso seguono una
politica LIFO (Last In First Out).

I dati vengono estratti (letti) in ordine
rigorosamente inverso rispetto a quello in
cui sono stati inseriti (scritti).
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici

Si immagini ad esempio una "pila di piatti"
o una "pila di giornali“; l'idea è che quando
si pone un piatto nella pila lo si metta in
cima, e che quando si preleva un piatto si
prelevi, analogamente, quello in cima.

In generale la pila è un particolare tipo di
lista in cui le operazioni di inserimento ed
estrazione si compiono dallo stesso
estremo.
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Esercizi
Realizzare una lista che permetta di
memorizzare un numero non definito di
valori interi inseriti da un utente.
 Stampare la lista.
 Permettere la ricerca di un valore nella lista.
 Permettere la cancellazione di un elemento.

Docente: Daniele Prevedello
Corso di informatica Athena – Periti Informatici
Ultimo compito:
IMPARARE A MEMORIA
COME IMPLEMENTARE UNA
LISTA (CODA O PILA) E LE
OPERAZIONI SU DI ESSE!
Docente: Daniele Prevedello