Le Liste Elisa Marengo Università degli Studi di Torino Dipartimento di Informatica Elisa Marengo (UNITO) Le Liste 1 / 31
Cos è una Lista Una lista è una collezione di elementi omogenei che: potrebbero non essere allocati in modo contiguo; il cui numero non è noto a priori e può variare durante l esecuzione del programma Si noti la differenza con gli array. Elisa Marengo (UNITO) Le Liste 2 / 31
Come si rappresenta una lista? Ogni elemento della lista: può contenere una o più informazioni memorizzate in campi contiene necessariamente un puntatore che lo lega all elemento successivo della lista Elisa Marengo (UNITO) Le Liste 3 / 31
Definizione di una lista Elemento struct elemento { int inf ; elemento * next ; ; inf contiene un valore intero (un informazione) next contiene il riferimento al prossimo elemento nella lista il campo next dell ultimo elemento sarà 0 (null); puntatore a struttura elemento altrimenti. Elisa Marengo (UNITO) Le Liste 4 / 31
Definizione di una lista Lista elemento * lista ; lista = new elemento ; Una lista è il puntatore al primo elemento della lista Se la lista è vuota il puntatore sarà nullo (0) Elisa Marengo (UNITO) Le Liste 5 / 31
Memorizzazione e Lettura di una lista Gli elementi di una lista Potrebbero non essere memorizzati in modo contiguo; Per scorrere una lista bisogna scorrere ogni elemento usando un puntatore; L ultimo elemento della lista è quello il cui puntatore all elemento successivo è null; Elisa Marengo (UNITO) Le Liste 6 / 31
Memorizzazione e Lettura di una lista Gli elementi di una lista Potrebbero non essere memorizzati in modo contiguo; Per scorrere una lista bisogna scorrere ogni elemento usando un puntatore; L ultimo elemento della lista è quello il cui puntatore all elemento successivo è null; Elisa Marengo (UNITO) Le Liste 7 / 31
Memorizzazione e Lettura di una lista Gli elementi di una lista Potrebbero non essere memorizzati in modo contiguo; Per scorrere una lista bisogna scorrere ogni elemento usando un puntatore; L ultimo elemento della lista è quello il cui puntatore all elemento successivo è null; Elisa Marengo (UNITO) Le Liste 8 / 31
Programma sulle liste Scrivere un programma che 1 permetta di memorizzare una lista composta di interi, chiedendo i dati da inserire all utente; 2 stampi gli elementi che compongono la lista. Elisa Marengo (UNITO) Le Liste 9 / 31
Programma sulle liste struct elemento { int inf ; elemento * next ; ; // Prototipi delle funzioni elemento * crea_ lista (); void visualizza_ lista ( elemento *); main (){ elemento * lista = crea_ lista (); visualizza_ lista ( lista ); Elisa Marengo (UNITO) Le Liste 10 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo e l emento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 11 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 12 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 13 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; cin>> p > inf; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 14 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 15 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento; punt = punt >next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 16 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 17 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next ; cin >> punt > inf; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 18 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next ; c i n>>punt >i n f ; punt >n e x t = 0 ; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 19 / 31
Creazione della lista elemento c r e a l i s t a (){ elemento p, punt ; i n t n ; cout<< I n s e r i r e i l numero d i e l e m e n t i ; cin>>n ; i f ( n==0){ p = 0 ; // l i s t a vuota e l s e { // primo elemento p = new elemento ; c i n>>p >i n f ; punt=p ; // e l e m e n t i r e s t a n t i f o r ( i n t i =2; i<=n ; i ++){ punt >next = new elemento ; punt = punt > next ; c i n>>punt >i n f ; punt > next = 0; r e t u r n p ; Elisa Marengo (UNITO) Le Liste 20 / 31
Visualizzazione della lista void v i s u a l i z z a l i s t a ( elemento p ){ cout<< L i s t a : ; w h i l e ( p!=0){ cout<<p >i n f << ; p = p >n e x t ; cout<<e n d l ; Elisa Marengo (UNITO) Le Liste 21 / 31
Esercizio Scrivere Una funzione che cancella da una lista la prima occorrenza di un elemento. Per farlo avvalersi di una funzione che: Riceve come parametro la lista e l elemento da cercare; Restituisce il puntatore all elemento da cancellare e il puntatore all elemento precedente. Elisa Marengo (UNITO) Le Liste 22 / 31
Cancellare elementi Elisa Marengo (UNITO) Le Liste 23 / 31
Cancellare elementi Elisa Marengo (UNITO) Le Liste 24 / 31
Cancellare elementi e lemento c e r c a v a l o r e ( e l emento p, int dato, e lemento &p r e c ){ b o o l t r o v a t o =f a l s e ; while ( p!=0 &&! t r o v a t o ){ i f ( p >i n f = = dato ){ t r o v a t o = t r u e ; else { p r e c =p ; p = p >n e x t ; return p ; Elisa Marengo (UNITO) Le Liste 25 / 31
Cancellare elementi e lemento c a n c e l l a e l e m e n t o ( elemento l i s t a, int dato ){ e lemento p r e c e d e n t e = 0 ; e lemento d a c a n c e l l a r e = c e r c a v a l o r e ( l i s t a, dato, p r e c e d e n t e ) ; i f ( d a c a n c e l l a r e!=0){ i f ( p r e c e d e n t e!= 0){ p r e c e d e n t e >n e x t=d a c a n c e l l a r e >n e x t ; else { l i s t a =l i s t a >n e x t ; d e l e t e d a c a n c e l l a r e ; return l i s t a ; Elisa Marengo (UNITO) Le Liste 26 / 31
Cancellare elementi main ( ) { int dato ; e lemento l i s t a = c r e a l i s t a ( ) ; v i s u a l i z z a l i s t a ( l i s t a ) ; cout<< I n s e r i r e elemento da c a n c e l l a r e ; c i n >>dato ; l i s t a = c a n c e l l a e l e m e n t o ( l i s t a, dato ) ; v i s u a l i z z a l i s t a ( l i s t a ) ; Elisa Marengo (UNITO) Le Liste 27 / 31
Inserire elementi Elisa Marengo (UNITO) Le Liste 28 / 31
Inserire elementi Elisa Marengo (UNITO) Le Liste 29 / 31
Inserire elementi Elisa Marengo (UNITO) Le Liste 30 / 31
Inserire elementi elemento i n s e r i s c i p o s i z i o n e ( elemento l i s t a, i n t p o s i z i o n e, i n t dato ){ elemento nuovo = new elemento ; nuovo >i n f = dato ; elemento temp = l i s t a ; i n t i =2; i f ( p o s i z i o n e == 1){ nuovo >n e x t= l i s t a ; l i s t a =nuovo ; e l s e { cout<< I n i z i o i l w h i l e <<e n d l ; w h i l e ( i<p o s i z i o n e && temp >n e x t!=0){ temp=temp >next ; i ++; nuovo >next=temp >next ; temp >n e x t=nuovo ; r e t u r n l i s t a ; Elisa Marengo (UNITO) Le Liste 31 / 31