Loading
Loading
Una struttura dati e un modo organizzato di rappresentare e conservare un insieme di dati in memoria, insieme alle operazioni che li manipolano: la scelta della struttura giusta determina la chiarezza e soprattutto l'efficienza degli algoritmi che la usano. In questo appunto si parte dai tipi strutturati statici (array, matrici, stringhe), si passa ai record e ai tipi definiti dall'utente, si studiano le strutture dinamiche lineari (liste concatenate, pile e code), si accenna alle strutture non lineari (alberi e grafi) e si chiude con gli algoritmi fondamentali di ricerca e ordinamento, valutandone il costo con la notazione asintotica.
5sezionica. 19min di lettura3competenzeLivelloBase 2 · Standard 1 · Approfondimento 2Verificato · 06/2026
livello base
E richiesto saper riconoscere e usare gli array, le pile e le code, descrivendone le operazioni fondamentali e applicando la ricerca lineare/binaria e un ordinamento elementare.
livello avanzato
Nell'opzione Scienze Applicate si chiede di implementare le strutture in un linguaggio reale (anche le liste concatenate), di motivare la scelta della struttura sul problema e di giustificare l'efficienza degli algoritmi con la notazione asintotica O-grande.
Lesetiefe: Approfondimento
Schriftgröße: Standard
Array di interi con indici e accesso diretto
Indirizzo di un elemento
In un array, l'indirizzo dell'elemento di indice i si ottiene dall'indirizzo base sommando i volte la dimensione d di un elemento: il calcolo e immediato, quindi l'accesso e a costo costante O(1).
Linearizzazione per righe
In una matrice memorizzata per righe (row-major) con C colonne, l'elemento di riga i e colonna j occupa la posizione lineare i x C + j; gli indici partono da 0.
Una matrice M di interi ha 4 righe e 5 colonne ed e memorizzata per righe (row-major), a partire dall'indirizzo base 1000; ogni intero occupa 4 byte. Determina l'indirizzo in memoria dell'elemento M[2][3] (indici a partire da 0).
Con C = 5 colonne, la posizione lineare e pos = i x C + j = 2 x 5 + 3.
Si moltiplica la posizione per la dimensione d = 4 byte e si somma all'indirizzo base 1000.
13 x 4 = 52, quindi 1000 + 52 = 1052.
Risultato: L'elemento M[2][3] si trova all'indirizzo 1052; l'intera posizione si calcola con poche operazioni aritmetiche, quindi l'accesso e a costo costante O(1).
Errori frequenti
Ripasso attivo
Dato un array A di n numeri interi, scrivi (in pseudocodice o in un linguaggio a tua scelta) un algoritmo che calcoli la somma e il valore massimo degli elementi con una sola scansione, indicandone il costo asintotico in funzione di n.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) - Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Record Studente: campi eterogenei sotto un unico nome
Dato un array elenco di N record Studente (con i campi cognome, matricola, media), scrivi un algoritmo che calcoli la media aritmetica del campo media su tutti gli studenti e indicane il costo.
Si pone un accumulatore somma a 0.
Per i da 0 a N-1 si somma elenco[i].media all'accumulatore: si accede prima all'elemento per indice, poi al campo per nome.
Al termine si divide la somma per N (con N > 0).
Risultato: L'algoritmo esegue una sola scansione dell'array, quindi ha costo lineare O(N); restituisce la media dei voti se N > 0, altrimenti il valore non e definito.
Errori frequenti
Ripasso attivo
Definisci un tipo record Libro con i campi titolo (stringa), anno (intero) e prezzo (reale); dichiara poi un array di 100 libri e scrivi l'istruzione che assegna 19.90 al prezzo del terzo libro del catalogo.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) - Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Pila (LIFO) e coda (FIFO) a confronto con le rispettive operazioni
Lista concatenata: nodi (informazione + puntatore al successivo)
Una pila e inizialmente vuota. Esegui nell'ordine: push(5), push(8), pop, push(3), pop, push(7). Indica l'elemento estratto da ciascun pop e il contenuto finale della pila dalla base alla cima.
La pila diventa, dalla base alla cima: 5, 8. La cima e 8.
Si rimuove la cima: viene estratto 8 (l'ultimo inserito, LIFO). Resta: 5.
Si inserisce 3 in cima. La pila diventa: 5, 3.
Si rimuove la cima: viene estratto 3. Resta: 5.
Si inserisce 7 in cima. La pila diventa: 5, 7.
Risultato: I pop estraggono nell'ordine 8 e poi 3; il contenuto finale della pila, dalla base alla cima, e 5, 7.
Errori frequenti
Ripasso attivo
Simula su carta una pila inizialmente vuota eseguendo, nell'ordine: push(5), push(8), pop, push(3), pop, push(7); indica per ogni pop l'elemento estratto e mostra il contenuto finale della pila dalla base alla cima.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) - Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Albero binario: radice, nodi interni e foglie
Considera l'albero binario di radice 8 con figli 3 (sinistro) e 10 (destro), dove 3 ha i figli 1 e 6 e 10 ha il solo figlio destro 14. Individua la radice, elenca le foglie e determina l'altezza dell'albero.
La radice e il nodo da cui parte la gerarchia e che non ha genitore: e il nodo 8.
Le foglie sono i nodi senza figli: 1, 6 e 14.
L'altezza e la profondita massima, cioe il numero massimo di archi da radice a foglia: dal nodo 8 al nodo 6 si percorrono 2 archi (8 -> 3 -> 6).
Risultato: La radice e 8, le foglie sono 1, 6 e 14 e l'altezza dell'albero e 2.
Errori frequenti
Ripasso attivo
Disegna un albero binario di radice 8 con i figli 3 (sinistro) e 10 (destro), dove 3 ha come figli 1 e 6 e 10 ha il solo figlio destro 14; individua la radice, le foglie e l'altezza dell'albero.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) - Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))
Ricerca binaria di 23 su un array ordinato di 10 elementi
Costo ricerca lineare
La ricerca sequenziale nel caso peggiore confronta tutti gli n elementi: il costo cresce linearmente con n.
Costo ricerca binaria
Dimezzando a ogni passo l'intervallo di ricerca, il numero di confronti e dell'ordine del logaritmo in base 2 di n; richiede pero un array ordinato.
Costo ordinamenti elementari
Selection, insertion e bubble sort confrontano nel caso peggiore un numero di coppie proporzionale a n^2: il costo cresce con il quadrato della dimensione.
Crescita del costo: confronto tra O(log n), O(n) e O(n²)
Sull'array ordinato [2, 5, 8, 12, 16, 23, 38, 56, 72, 91] (indici da 0 a 9) applica la ricerca binaria per cercare il valore 23; indica a ogni passo l'elemento centrale confrontato e conta i confronti.
Intervallo [0, 9]: centro all'indice (0+9)/2 = 4, valore 16. Poiche 23 > 16, si scarta la meta sinistra e si prosegue su [5, 9].
Intervallo [5, 9]: centro all'indice (5+9)/2 = 7, valore 56. Poiche 23 < 56, si scarta la meta destra e si prosegue su [5, 6].
Intervallo [5, 6]: centro all'indice (5+6)/2 = 5, valore 23. Coincide con il valore cercato: trovato all'indice 5.
Risultato: Il valore 23 viene trovato all'indice 5 in 3 confronti; coerentemente con il costo O(log n), poiche log2(10) e circa 3.32, sono sufficienti pochi confronti contro i fino a 10 della ricerca lineare.
Errori frequenti
Ripasso attivo
Sull'array ordinato [2, 5, 8, 12, 16, 23, 38, 56, 72, 91] applica la ricerca binaria per cercare il valore 23: indica a ogni passo l'elemento centrale confrontato, il numero totale di confronti e l'esito.
Richiamo attivo
Ricorda i punti chiave — poi rivela.
Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) - Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM)) · Esame di Stato del secondo ciclo - quadri di riferimento e griglie di valutazione (Ministero dell'Istruzione e del Merito (MIM))
Riferimenti e fonti