Lezione Sulle Liste Linkate

3,319 views
3,122 views

Published on

lista concatenata

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,319
On SlideShare
0
From Embeds
0
Number of Embeds
22
Actions
Shares
0
Downloads
38
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Lezione Sulle Liste Linkate

  1. 1. LEZIONE SULLE LISTE LINKATE Prof. Silvano Natalizi, classe IV Liceo Tecnico Marzo 2009
  2. 2. PROBLEMA 1 <ul><li>Creare un file di testo con una sequenza di nomi (di una sola parola senza spazi) di studenti, materia, voto: fatto ad esempio in questo modo: STUDENTE Mario MATERIA matematica VOTO 4 VOTO 6 VOTO 6 MATERIA italiano VOTO 7 STUDENTE Rossi MATERIA italiano VOTO 8 VOTO 7 </li></ul>
  3. 3. PROBLEMA 2 <ul><li>leggete il file precedente con i metodi della classe Scanner. Anzitutto stampate sul pannello DOS, per ogni studente, il suo nome, e le materie ciascuna con i suoi voti. Al seguente modo: </li></ul><ul><li>Studente: Mario </li></ul><ul><li>Materia: matematica </li></ul><ul><li>voto: 4 6 6 </li></ul><ul><li>Materia: italiano </li></ul><ul><li>voto: 7 </li></ul><ul><li>  </li></ul><ul><li>Studente: Rossi </li></ul><ul><li>Materia:italiano </li></ul><ul><li>voto: 8 , 7 </li></ul>
  4. 4. PROBLEMA 3 <ul><li>La precedente stampa, portatela su di un pannello grafico. Per ogni studente crea un pannello dove mostri il suo nome, e per ogni materia la media dei suoi voti. </li></ul>
  5. 5. ANALISI DELLA SOLUZIONE <ul><li>Possiamo memorizzare i dati del file in un array? </li></ul><ul><li>No, perché in un array di java dobbiamo avere dei dati omogeni tra di loro. </li></ul><ul><li>Qui invece abbiamo dei dati variabili </li></ul><ul><li>Possiamo però ricorrere ad un’altra struttura dati, quella delle liste linkate. </li></ul>
  6. 6. NOZIONE DI LISTA LINKATA (CONCATENATA) <ul><li>Una lista concatenata è fatta da una sequenza di nodi </li></ul><ul><li>Ciascuno dei quali ha due puntatori, al nodo precedente e al nodo successivo </li></ul>
  7. 7. LISTA SINGOLA <ul><li>In una lista singola, ciascun nodo ha un solo puntatore, che punta al successivo nodo della lista </li></ul><ul><li>Possiamo pensare ad un nodo come ad una cella con due componenti: </li></ul><ul><li>Data rappresenta i dati del nodo; uno o più attributi che devono essere memorizzati nel nodo </li></ul><ul><li>Next è un puntatore al nodo successivo </li></ul><ul><li>Se il nodo successivo non c’è il suo puntatore è il puntatore “null pointer” </li></ul><ul><li>In java il valore “null pointer” è null. </li></ul>data next
  8. 8. OGGETTO CHE PUNTA AL PRIMO NODO <ul><li>Ci occorre un oggetto che punti al primo nodo della lista </li></ul><ul><li>Chiamiamolo top </li></ul><ul><li>Se la lista è vuota, top è null </li></ul><ul><li>Il simbolo di terra è usato per indicare il puntatore nullo </li></ul>
  9. 9. ATTRAVERSAMENTO DI UNA LISTA <ul><li>Quando si attraversa una lista linkata è come andare ad una caccia al tesoro. </li></ul><ul><li>Sapete dove si trova il primo indizio. Ve lo dice TOP. </li></ul><ul><li>Arrivati al primo indizio, questo vi rinvia ad un secondo indizio. Ve lo dice next. </li></ul><ul><li>Quando arrivate al secondo indizio, questi vi rinvia ad un terzo indizio (tramite next); e così via </li></ul><ul><li>Quando arrivate a recuperare l’ultimo indizio, il “puntatore nullo” vi fa capire che siete giunti alla fine della caccia. (la fine della lista) </li></ul>
  10. 10. LISTA CONCATENATA IN JAVA <ul><li>Come indichiamo una lista concatenata in java? </li></ul><ul><li>Poiché ciascun nodo consiste di almeno due attributi, ci occorre una classe per definire il formato di un nodo. </li></ul><ul><li>Il componente data può consistere di uno o più campi (ciascuno dei quali può anche essere un oggetto con ulteriori attributi). </li></ul><ul><li>Il tipo di questi attributi dipende dal tipo di dato che occorre memorizzare </li></ul><ul><li>Ma qual è il tipo del campo next? </li></ul><ul><li>Sappiamo che è un puntatore </li></ul><ul><li>Ma un puntatore a cosa? </li></ul>
  11. 11. IL PUNTATORE <ul><li>Il puntatore di un nodo punta ad un oggetto che è simile a quello che ci serve nel data. </li></ul><ul><li>Ad esempio supponiamo che il dato sia in ciascun nodo un numero intero. </li></ul><ul><li>Definiamo la classe, dalla quale saranno creati i nodi di questa lista, al seguente modo: </li></ul><ul><li>Class Node { </li></ul><ul><li>int num; </li></ul><ul><li>Node next; </li></ul><ul><li> } </li></ul>
  12. 12. DEFINIZIONE DELLA VARIABILE TOP <ul><li>La variabile top può essere definita come una variabile di tipo Node, pertanto </li></ul><ul><li>Node top; </li></ul><ul><li>La dichiarazione di top alloca spazio per top, ma non crea nessun nodo. Ancora non ci sono nodi nella lista </li></ul><ul><li>Creiamo il primo nodo ed assegnamo il suo indirizzo a top: </li></ul><ul><li>Top=new Node(); </li></ul>
  13. 13. COSTRUZIONE DI UNA LISTA <ul><li>Risolviamo il problema di leggere dei numeri interi positivi e di costruire una lista con questi numeri </li></ul><ul><li>Ad esempio dati i numeri 36 15 52 23 0 </li></ul><ul><li>Vogliamo costruire la seguente lista: </li></ul>
  14. 14. IMPLEMENTAZIONE DELLA LISTA <ul><li>Quando leggiamo un nuovo numero, dobbiamo </li></ul><ul><li>Creare il nuovo nodo, instanziando l’oggetto corrispondente </li></ul><ul><li>Caricare il numero nel nuovo nodo </li></ul><ul><li>Far si che il nuovo nodo sia l’ultimo della lista </li></ul><ul><li>Codifichiamo il costruttore della classe Node </li></ul><ul><li>public Node (int n) { </li></ul><ul><ul><ul><li>num=n; </li></ul></ul></ul><ul><ul><li> next=null; </li></ul></ul><ul><ul><li>} </li></ul></ul>
  15. 15. COSTRUZIONE DELLA LISTA, AGGIUNTA DI NUOVI NODI IN CODA <ul><li>np=new Node(n); </li></ul><ul><li>if (top==null) top=np; </li></ul><ul><li>else last.next=np; </li></ul><ul><li>last=np; </li></ul><ul><li>last è un puntatore all’ultimo nodo </li></ul>
  16. 16. SPIEGAZIONE VISIVA

×