La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.

Presentazioni simili


Presentazione sul tema: "1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione."— Transcript della presentazione:

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?


Scaricare ppt "1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione."

Presentazioni simili


Annunci Google