Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoGioacchino Salvadori Modificato 9 anni fa
1
1 Strutture dati
2
2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati indirizzi e celle di memoria Ci interessa solo la loro organizzazione astratta
3
3 Strutture statiche e dinamiche Statica: che non cambia nel tempo (forma o dimensione) Es.: elenco di nomi: posso aggiungere o eliminare nomi? Struttura statica: solo metodi per accedere ai dati e per modificarli Struttura dinamica: anche metodi per aggiungere e togliere dati, e trovare spazio in memoria per i nuovi dati
4
4 Puntatori Ogni cella di memoria ha un indirizzo Indirizzo = valore numerico puo’ essere memorizzato in una cella di memoria Puntatore: cella/e di memoria che contiene l’indirizzo di un’altra cella di memoria Puo’ servire a sapere dove sono stati memorizzati dei dati Es.: registro contatore programma della CPU
5
5 Puntatori come tipi di dati In molti linguaggi di programmazione Dichiarazione, allocazione, gestione dei puntatori (come un real o un integer) Es.: in memoria c’e’ una lista di romanzi (per ordine alfabetico del titolo) Vogliamo trovare tutti i romanzi di un certo autore aggiungo una cella ad ogni romanzo, che contiene il puntatore al romanzo successivo dello stesso autore, in un ciclo
6
6 Esempio
7
7 Array omogeneo Viene memorizzato in memoria in celle contingue Facile trovare l’elemento i: Vado all’indirizzo di inizio dell’array, x Vado all’indirizzo x + (i-1)*k celle, dove k=numero di celle per un elemento dell’array
8
8 Esempio
9
9 Array bidimensionale Esempio: tabella con venditori sulle righe e giorni della settimana sulle colonne: numero di vendite in ogni cella array bidimensionale Una riga: vendite di un venditore in una settimana Una colonna: vendite fatte in un giorno da tutti i venditori
10
10 Simulazione di tabella in memoria Memoria: sequenza di celle con indirizzi consecutivi Un array e’ statico posso riservare un pezzo di memoria per l’intero array, e poi metterci l’array riga per riga
11
11 Esempio Come trovare il valore in terza riga e quarta colonna? Da prima cella, passiamo la prima riga e la seconda Cinque elementi per riga 10 elementi pr arrivare al primo elemento della terza riga Altri 3 elementi per quarto elemento della terza riga 13 elementi in totale
12
12 In generale... Array con c colonne, x indirizzo iniziale Indirizzo di elemento in riga i e colonna j: x + (c * (i-1)) + (j-1) Il compilatore traduce i riferimenti (es. Vendite[2,4]) in indirizzi di memoria Il programmatore usa la forma tabulare (struttura astratta), il compilatore usa la memorizzazione in memoria (struttura fisica)
13
13 Esercizio Array bidimensionale con 8 righe e 11 colonne Ogni elemento occupa 2 celle di memoria Memorizzato per righe a partire dall’indirizzo 25 Indirizzo dell’elemento in terza riga e sesta colonna? 25 + (11x2x2) + (2x5) = 25+44+10=79
14
14 Liste Sequenza di elementi, dinamica Es.: lista di nomi, ogni nome 8 lettere 8 celle di memoria Come la memorizzo in memoria? Blocco di celle consecutive (80)?
15
15 Liste contigue Devo cancellare un nome spazio vuoto devo spostare tutti i nomi che seguono (ordine alfabetico) Devo inserire un nuovo nome non c’e’ spazio devo spostare tutto il blocco
16
16 Lista concatenata Gli elementi sono memorizzati in aree di memoria diverse invece che contigue Nell’esempio, 9 celle per ogni nome: 8 per il nome, 1 per puntatore all’elemento successivo Inoltre, puntatore al primo elemento (testa) della lista Puntatore speciale (nil) nell’ultimo elemento Per accedere all’elemento i-esimo: devo scorrere tutti gli elementi dal primo all’i-esimo
17
17 Lista concatenata
18
18 Cancellazione in liste concatenate Modifico il puntatore che punta all’elemento da cancellare, e lo faccio puntare all’elemento successivo
19
19 Inserzione in liste concatenate Trovo un blocco di 9 celle “libero”, dove metto il nome e il puntatore all’elemento che lo seguira’ nella lista Cambio il puntatore di chi lo precedera’ per farlo puntare a lui
20
20 Code e pile Le liste concatenate riducono gli spostamenti se permettiamo inserzioni e cancellazioni ovunque Se permettiamo modifiche solo alle estremita’, anche una struttura contigua puo’ andare bene Pila (stack): inserzioni (push) e cancellazioni (pop) solo ad una estremita’ (cima) l’ultimo elemento inserito e’ il primo ad essere cancellato (LIFO) codapila
21
21 Memorizzazione di una pila Blocco di celle contigue, grande abbastanza per le inserzioni previste Puntatore alla cima dello stack (ultimo elemento riempito)
22
22 Pila per chiamate di procedura Quando un programma chiama una procedura, deve memorizzare da qualche parte l’indirizzo di ritorno (da cui riprendere l’esecuzione dopo) Dove lo memorizza? In una pila Chiamata dopo chiamata, gli indirizzi vengono memorizzati sulla pila Alla chiusura delle procedure, gli indirizzi di ritorno vengono presi in ordine opposto
23
23 Pila per chiamate di procedura
24
24 Pila per ordine inverso Vogliamo stampare gli elementi di una lista concatenata in ordine inverso Ci serve una struttura dati per memorizzare ogni nome finche’ i nomi seguenti non sono stati stampati Scorro la lista e metto i nomi su una pila Alla fine della lista, stampo i nomi della pila
25
25
26
26
27
27 Esercizi e domande Un programma chiama la procedura A, che chiama la B. Quando B termina, A chiama la procedura C. Seguire questo percorso mantenendo aggiornata la pila delle posizioni di ritorno.
28
28 Coda Tutti gli inserimenti ad una estremita’ (coda) Tutte le cancellazioni all’altra estremita’ (testa) FIFO Memorizzazione: celle contigue due puntatori alla testa: primo elemento alla coda: primo elemento libero Coda “circolare”: quando gli elementi ragiungono la fine del blocco, inserisco dall’altra estremita’
29
29 Code
30
30 Code
31
31 Code circolari
32
32 Code circolari
33
33 Esercizio IndirizzoContenuto 11C 12 13G 14 15E 16 17B 18 19U 20 21F 22 Inserire gli indirizzi nelle celle vuote in modo che ogni cella con una lettera, piu’ la cella successiva, formi un elemento di una lista concatenata in cui le lettere appaiono in ordine alfabetico Che indirizzo per testa lista?
34
34 Esercizio IndirizzoContenuto 30J 3138 32B 3330 34X 3546 36N 3740 38K 3936 40P 4134 Lista concatenata Un elemento: due celle (lettera + indirizzo elemento successivo) Modificare i puntatori per eliminare N Sostituire N con G e modificare puntatori in modo che G sia in ordine alfabetico
35
35 Esercizio IndirizzoContenuto 30N 3136 32I 3330 34J 3540 36E 3700 38M 3932 40A 4130 Puntatore alla testa: 34 Che nome e’ contenuto nella lista? Modificare puntatori per avere il nome Jean
36
36 Esercizio Coda Ogni elemento occupa una cella di memoria Puntatore alla testa = 11 Puntatore alla coda = 17 Quali soni i valori dei due puntatori dopo aver inserito un elemento e eliminati due?
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.