Interfacce per il riutilizzo del codice
|
|
- Matteo Leone
- 7 anni fa
- Visualizzazioni
Transcript
1 Interfacce per il riutilizzo del Nelle SoluzioniLab3 c è una classe di nome Operasunumeri con la quale si esegue il calcolo della somma, del massimo e del numero di dati inseriti. public class Operasunumeri{ private double s; private double max; private int cont; /* costruttore: inizializza la somma a zero, il massimo con l'estremo inferiore, il contatore dei numeri a zero */ public Operasunumeri(){ s = 0; max = - Double.MAX_VALUE; cont = 0; //fine costruttore /* metodo aggiungi : aggiunge un valore alla volta aggiornando il valore della somma, del massimo e del contatore dei valori inseriti */ public void aggiungi(double x){ s = s + x; if(max < x) max = x; cont++; //fine aggiungi /* metodo somma : restituisce la somma dei valori inseriti */ public double somma(){ return s; /* metodo massimo : restituisce il massimo dei valori inseriti */ public double massimo(){ return max; /**metodo quanti : restituisce il numero di valori inseriti */ public int quanti(){ return cont; //fine classe Operasunumeri Consideriamo la classe BankAccount e supponiamo di avere un certo numero di conti bancari (una banca) e di voler calcolare quanti soldi ci sono in totale nella banca (somma). 1
2 Supponiamo anche di voler sapere quanti sono i conti gestiti dalla banca (contatore) e quale è il conto bancario che ha il saldo maggiore (massimo). Avendo a disposizione la classe Operasunumeri, possiamo riscriverla adattandola agli oggetti di tipo BankAccount. Dovremo fare qualche modifica. public class OperasuBankAccount{ private double s; private BankAccount max; private int cont; //usiamo il costruttore di default: //numeri = 0, riferimenti = null /* Il massimo che cerchiamo è il conto corrente che possiede il saldo maggiore */ public void aggiungi (BankAccount x){ s = s + x.getbalance(); if(cont==0 max.getbalance()< x.getbalance()) max = x; //quando cont = 0 si inizializza max //con il primo conto cont++; public BankAccount massimo(){ return max;... // altri metodi: quanti, somma... //fine OperasuBankAccount In maniera analoga potremo dover risolvere un altro problema in cui si vuole trovare quale oggetto, in un elenco di oggetti, ha il valore massimo in uno dei suoi dati. Esempio. Dati dei numeri complessi trovare quello il cui modulo è maggiore; dato un borsellino contenente delle monete vogliamo sapere quale è la somma totale e quale è la moneta con il valore più elevato. Dovremo scrivere una classe OperasuMonete? Vediamo di risolvere il problema in altro modo. Dato un insieme di oggetti possiamo stabilire cosa si intende per misura di quell oggetto; vogliamo poi risolvere il problema di trovare l oggetto che ha la misura più grande. Esempio. Dato un insieme di Pile vogliamo trovare la Pila che contiene più elementi. Abbiamo bisogno di definire una proprietà astratta: essere misurabile. 2
3 Abbiamo visto che in Java per definire una proprietà astratta si usa una interfaccia nella quale si dichiarano le firme dei metodi che rappresentano la proprietà. Le classi che realizzano l interfaccia dovranno costruire il per tutti i metodi dell interfaccia. Definiamo pertanto l interfaccia Misurabile per definire la proprietà di: avere una misura public interface Misurabile{ //metodo che rappresenta una misura double estraimisura(); //Object altridati(); Possiamo aggiungere un metodo altridati per poter rappresentare altre informazioni sugli oggetti misurabili: ad esempio il nome del correntista il cui conto bancario è il massimo. Vogliamo non aver più bisogno di scrivere la classe OperasuBankAccount e classi analoghe per risolvere problemi analoghi. Per prima cosa dovremo dichiarare che BankAccount realizza l interfaccia Misurabile e stabilire cosa intendiamo per misura di un conto bancario. Stabiliamo che la misura in BA è il valore del suo saldo. public class BankAccount implements Misurabile{... public double estraimisura(){ return balance; public Object altridati(){ return nome; //fine BankAccount Però dobbiamo ancora fare della modifiche sulla classe che esegue la somma e trova il massimo, in modo da poterla riutilizzare nella soluzione di problemi analoghi. La classe OperasuBankAccount eseguiva le operazioni per il calcolo della somma, del numero di elementi inseriti e trovava l elemento max: il conto bancario con il saldo maggiore. Un altra classe avrebbe trovato come max la moneta con il valore più grande, oppure la Pila con il maggior numero di elementi. Pensiamo allora di costruire una classe per gestire questi oggetti misurabili. Costruiamo una classe OperasuOggetti per oggetti le cui classi realizzano l interfaccia Misurabile: 3
4 public class OperasuOggetti{ private double s; private Misurabile max; private int cont;...//costruttore public void aggiungi(misurabile x){ s = s + x.estraimisura(); if(cont==0 max.estraimisura()< x.estraimisura()) max = x; cont++; //fine aggiungi public Misurabile massimo(){ return max;...//metodi quanti, somma //fine OperasuOggetti Questa classe potrà essere utilizzata dagli oggetti la cui classe che realizza Misurabile. Questo è un esempio di polimorfismo. Il metodo estraimisura è polimorfo. Con l invocazione del metodo x.estraimisura() otteniamo diversi comportamenti. La classe BankAccount realizza estraimisura restituendo il saldo; un altra classe realizerà estraimisura restituendo un valore double con il significato di misura in quella classe. In realtà x non ha un suo tipo di dato: x è di tipo interfaccia. Sarà l interprete Java che, durante l esecuzione, vede quale riferimento è memorizzato in x ed attiva il metodo della classe corrispondente. Con l interfaccia Misurabile abbiamo trasferito agli oggetti una caratteristica dei numeri: avere un valore; con i numeri possiamo eseguire somme, trovare un massimo, rappresentare una misura. Possiamo anche ordinare oggetti? Prima di tutto ci dobbiamo chiedere se ha senso confrontare oggetti. Lo abbiamo appena fatto cercando il massimo, quindi i confronti possono avere significato. Esempio. Vogliamo mettere in ordine i conti bancari in modo che seguano un ordine dal saldo minimo al saldo massimo (crescente). Volgiamo mettere in fila dei numeri complessi in modo che siano secondo l ordine crescente del loro modulo (reale). Cosa significa per oggetti il dire: l oggetto1 è minore (maggiore o uguale) dell oggetto2? Abbiamo già visto con le stringhe che non possiamo confrontare i riferimenti. Dobbiamo pensare ad una proprietà: essere confrontabile. Esempio. Per la classe Complex può essere il modulo: è un valore reale, esiste un ordine. 4
5 Nella classe BankAccount potrebbe essere il saldo, un numero reale, e pensare un ordine dal più povero al più ricco; oppure potrebbe essere il numero di conto, numero intero: dal cliente che per primo ha aperto un conto all ultimo che lo ha attivato. Per la classe Studente potrebbe essere la matricola, numero intero, oppure il nome, è una stringa e sappiamo che le stringhe hanno un ordine. Nel pacchetto java.lang c è un interfaccia che rappresenta la proprietà astratta essere confrontabile : l interfaccia Comparable (Par. 13.8). public interface Comparable{ int compareto(object other); Il metodo compareto restituisce un valore intero; la classe String realizza Comparable: s1.compareto(s2) con s1, s2 di tipo String. Interfaccia Comparable Siano a e b due oggetti di una classe che realizza Comparable, si ha: < 0 a precede b a.compareto(b) = 0 a è uguale a b > 0 a segue b Cosa significano i termini precede, segue, uguale, dipende dalle scelte che facciamo. Esempio. Consideriamo la classe Studente i campi nome e matricola; stabiliamo un confronto in base alla matricola. Interfaccia Comparable public int compareto(object altrostud) {Studente altro = (Studente)altrostud; int valore; if(this.matricola < altro.matricola) valore = -1; else if(matricola > altro.matricola) valore = 1; else valore = 0; return valore; Interfaccia Comparable Abbiamo dovuto fare il cast Studente altro = (Studente)altrostud; perché altrostud non possiede il campo matricola, dato che è Object. Possiamo fare altro.matricola perché siamo nella classe Studente. Vediamo la classe BankAccount che implementa due interfacce. Interfaccia Comparable public class BankAccount implements Misurabile, Comparable{... //estraimisura, altridati public int compareto(object other){ BankAccount ab = (BankAccount)other; if(this.balance < ab.balance) return -1; if(this.balance > ab.balance) return 1; return 0; //non strutturato, ma possibile 5
6 Interfaccia Comparable Possiamo anche confrontare stringhe, ad esempio ordinare gli studenti per nome (purché diversi): public int compareto(object altrostud) { Studente altro = (Studente)altrostud; return nome.compareto(altro.nome); dove nome è this.nome e compareto è quello delle stringhe. Interfaccia Comparable Ora che sappiamo cosa significa confrontare oggetti, possiamo metterli in ordine: public static void ordlineare ( BankAccount a[]){ BankAccount sc; //ciclo su i //ciclo su k if(a[i].compareto(a[k]) > 0) //scambio Interfaccia Comparable Se dobbiamo ordinare elementi di tipo Complex o Studente dobbiamo riscrivere l ordinamento. Possiamo fare meglio? All ordinamento basta avere degli oggetti che siano confrontabili, la cui classe realizzi Comparable. In maniera analoga a quanto fatto con Misurabile, andiamo a definire una variabile di tipo Comparable e scriviamo un ordinamento per oggetti qualunque. Interfaccia Comparable public static void ordlineare( Comparable a[]){ //ordinamento per oggetti confrontabili Comparable sc; for(int i=0; i<a.length-1; i++) for(int k=i+1; k<a.length; k++) if(a[i].compareto(a[k])> 0){ sc = a[i]; a[i] = a[k]; a[k] = sc; //fine if Sovrascrivere il metodo equals Sovrascrivere il metodo equals Consideriamo un array di numeri, ci interessa sapere se ci sono oppure no degli elementi ripetuti nella sequenza; esempio a = (1, 3, 2, 7, 3, 4) il 3 è ripetuto a = (1, 2, 4, 7, -5, 0) sono tutti diversi avremo un algoritmo del tipo: algoritmo boolean distinti (array a) def. variabili diverso logico i, k intero 6
7 Sovrascrivere il metodo equals diverso vero i 0 mentre i < a.length -1 e diverso eseguire per k = i+1 fino a a.length-1 eseguire se a[i] == a[k] allora diverso falso //fineif //fineper i i+1 //finementre restituire diverso // fine algoritmo Sovrascrivere il metodo equals Possiamo fare una cosa simile con gli oggetti? La superclasse Object possiede un metodo per verificare se due oggetti sono uguali: public boolean equals(object ob){ return (this == ob); Il confronto this==ob restituisce vero o falso. Il confronto precedente è fatto tra riferimenti, quindi per gestire oggetti uguali andiamo a sovrascrivere il metodo equals: lo abbiamo visto con la classe String. Sovrascrivere il metodo equals public class BankAccount{... //saldo, numeroconto, nome public boolean equals(object ob){ BankAccount ab = (BankAccount)ob; if(this.balance == ob.balance) return true; else return false; //fine equals //fine BA Sovrascrivere il metodo equals In BA potevamo scegliere di usare compareto invece di equals: a.compareto(b) == 0 corrisponde a a.equals(b) vero non per tutti gli oggetti può aver senso cercare l ordine, mentre l uguaglianza è una caratteristica degli oggetti. Esercizio. Costruire un metodo per verificare se in un array di oggetti ci sono elementi ripetuti. Lista concatenata Struttura di dati lista concatenata Consideriamo una nuova modalità di memorizzare i dati in cui l accesso non avviene più tramite un indice, che individua la posizione del dato nella struttura, ma tramite un indirizzo di memoria. Per poter costruire una sequenza di informazioni è necessario che ogni dato della struttura memorizzi l indirizzo di memoria dell elemento successivo. Si costruisce pertanto una struttura di dati collegata, chiamata lista concatenata o catena. 7
8 Lista concatenata Ogni nodo (anello) di una lista concatenata oltre all informazione memorizza il riferimento dell elemento successivo: avremo bisogno di un nodo con le caratteristiche del record per poter rappresentare due (o più) campi di tipo diverso: dato: info riferimento: next Lista concatenata Il nodo sarà composto da : l informazione: un elemento di tipo base o un oggetto, tutto ciò che possiamo memorizzare in un array; il riferimento sarà un riferimento ad un nodo: un riferimento ad un elemento dello stesso tipo del nodo. Si intuisce che le definizione del nodo sarà un po particolare: dobbiamo definire il tipo del nodo, ma al suo interno dobbiamo usare quel tipo (il nodo ha un campo riferimento). Lista concatenata Le informazioni memorizzate non sono più necessariamente contigue in memoria, come nell array. Lista concatenata Supponiamo di voler costruire una struttura di dati lista concatenata per rappresentare una sequenza di interi. Sintassi per definire il nodo: class ElemIntero{ int info; //dato ElemIntero next; //riferimento Lista concatenata Come possiamo gestire l accesso per la classe ElemIntero? 1) classe public, elementi private: si devono costruire i metodi per accesso e modifica dei campi; 2) controllo di pacchetto (nessuna specifica) sia per la classe che per i campi: l accesso ai campi è tramite il nome; 3) classe interna privata e nessuna specifica sui campi; adottiamo questa scelta. Lista concatenata public class TDAListaConc{... //metodi per gestire il TDA... private class ElemIntero{ int info; ElemIntero next; //fine classe ElemIntero 8
9 Lista concatenata Quale vantaggio e quale sicurezza comporta questa scelta? Essendo privata la classe non è visibile dall esterno: quindi si rispettano per i suoi campi le direttive dell incapsulamento. Essendo interna e non specificando l accesso i suoi campi sono visibili internamente alla classe che realizza il TDA e si possono utilizzare senza dover scrivere, in ElemIntero, i metodi di accesso e di modifica. Confronto tra array e lista concatenata Confronto tra array e lista concatenata Prima di vedere i metodi per costruire una Pila con una lista concatenata, mettiamo a confronto le due strutture di dati: accesso elemento successivo inserimento e cancellazione dimensione spazio di memoria Accesso: lista concatenata L accesso è sequenziale: per accedere ad un dato si deve scorrere la lista facendo una scansione lineare. Di fatto si esegue una ricerca nella struttura esaminando i nodi fino a trovare il valore cercato. Non si può ritornare indietro: si può solo vedere in avanti. Sia a di tipo ElemIntero, cerchiamo se a.info è uguale ad un valore x, iniziando dal primo elemento della struttura fino all ultimo elemento della struttura. Accesso: lista concatenata L accesso è: a.info Accesso: array L accesso è diretto: per accedere ad un dato si utilizza l indice dell array inizio La struttura è accessibile da un riferimento inizio che vede il primo nodo. Si può anche gestire la struttura con un primo elemento privo di informazione: nodo vuoto. x x Se v è il nome dell array, v[i] rappresenta l accesso all i-esimo elemento: nel nostro esempio x coincide con v[3]. Con l accesso diretto non c è un ordine da rispettare: v[3], v[0], v[5], : si può tornare indietro. 9
10 Successivo: lista concatenata Ogni nodo, tranne l ultimo, contiene nel campo next la referenza (indirizzo di memoria) al nodo successivo. Se a è di tipo ElemIntero e a vede un nodo della lista, per passare al nodo successivo si memorizza in a il riferimento al nodo successivo: a = a.next; //riferimento a.next Successivo: array Dato un elemento nella posizione i, v[i], il successivo (se i v.length-1) si trova nella posizione i+1; per passare al successivo si fa i+1, quindi v[++i] oppure i = i+1; uso v[i] a Inserimento e cancellazione: lista concatenata Per inserire un nuovo nodo bisogna: 1) costruire il nuovo nodo 2) agganciarlo nella posizione voluta con assegnazioni sui riferimenti 1) costruzione del nuovo nodo: ElemIntero nuovo = new ElemIntero(); nuovo.info = x; 2) per poterlo agganciare bisogna sapere dove. Inserimento e cancellazione: lista concatenata Bisogna trovare una posizione nella lista, dopo la quale effettuare l inserimento del nuovo nodo: questa posizione si ottiene facendo la scansione lineare alla ricerca di un valore z (un campo info) che dovrà essere presente nella lista. z x Inserimento e cancellazione: lista concatenata Per cancellare un nodo bisogna assegnare ad un riferimento next il valore del riferimento successivo: a.next = a.next.next; Inserimento e cancellazione: array Per inserire un nuovo dato nella i-esima posizione si deve: 1) aumentare la lunghezza dell array, se l array è pieno: costruire un nuovo array w 2) copiare i valori fino alla posizione i nel nuovo array, inserire il nuovo elemento, copiare i rimanenti valori 2 bis) se non serve la posizione intermedia, si può aggiungere alla fine. 10
11 Inserimento e cancellazione: array Per cancellare un dato dalla i-esima posizione si deve: 1) ricopiare gli elementi a partire dalla posizione i+1 sul precedente 1 bis) se l elemento da togliere è unico e non interessa l ordine, si può copiare l ultimo sull i-esimo posto. Dimensione: lista concatenata La dimensione non è fissata: non c è un limite sulla dimensione massima, l unico limite è lo spazio di memoria: non bisogna mai ridimensionare una lista concatenata. Si può gestire male la memoria e occuparla tutta: se viene esaurita la memoria disponibile la JVM interrompe l esecuzione segnalando: OutOfMemoryError Dimensione: array L array è a dimensione fissa. Possiamo risolvere il problema con la tecnica del raddoppio e riassegnando il riferimento della nuova area di memoria. Anche in questo caso il limite è lo spazio di memoria complessivo. Spazio di memoria: lista concatenata La lista concatenata occupa più spazio: ogni nodo è composto da due campi: l informazione il riferimento Se anche l informazione è un oggetto, il nodo è composto da due riferimenti, uno dei quali vede l elemento successivo e l altro l oggetto. Spazio di memoria: array L array occupa meno spazio: c è solo l informazione che deve essere memorizzata Conclusione. L array richiede spostamento di dati (O(n)) nel caso di inserimento e cancellazione, che per la lista sono O(1); possiede invece accesso diretto, che è O(1), mentre la lista accesso sequenziale, che è O(n). Pertanto il tipo di problema suggerirà quale struttura di dati sia più idonea: molti accessi e poche modifiche oppure pochi accessi e molte modifiche. Lista concatenata Se la lista concatenata non ha una dimensione massima dobbiamo però individuarne la fine: un valore di riferimento dal quale non si acceda ad alcun nodo. Tale valore è null. inizio 11
12 Pila su lista concatenata Vogliamo ora realizzare il TDA Pila di interi su una lista concatenata: dovremo realizzare gli assiomi: verifica se la Pila è vuota guarda la testa inserisci in testa estrai la testa Pila su lista concatenata Dobbiamo avere un riferimento al primo nodo per poter accedere alla struttura di dati: ElemIntero primo; Dobbiamo rappresentare la situazione: Pila vuota. Se la Pila è vuota, non c è alcun elemento nella Pila, quindi primo non contiene nulla : primo = null; Pila su lista concatenata Dobbiamo inserire in testa: 1) costruiamo un elemento: ElemIntero nuovo = new ElemIntero(); nuovo.info = valore; 2) agganciamo nuovo in testa: nuovo deve diventare la nuova testa: nuovo.next = primo; //aggancio alla Pila primo = nuovo; //nuovo diventa la testa Pila su lista concatenata Queste assegnazioni valgono anche quando si inserisce il primo elemento, partendo da lista vuota: nuovo.next = primo; //aggancio alla Pila primo = nuovo; //nuovo diventa la testa Quando la lista è vuota, primo = null; quindi la prima assegnazione memorizza null nel campo nuovo.next: il nuovo elemento è l ultimo. La seconda assegnazione lo fa diventare il primo elemento della lista. Pila su lista concatenata Dobbiamo estrarre la testa: se la Pila non è vuota: primo = primo.next; se la Pila è vuota: lanciamo l eccezione EmptyStackException Se nella Pila c è un solo elemento, con l istruzione precedente si vuota la Pila: infatti, primo.next=null (uno solo è l ultimo), pertanto primo diventa null e quindi la Pila è vuota. Pila su lista concatenata Dobbiamo guardare la testa: se la Pila non è vuota: primo.info; se la Pila è vuota: lanciamo l eccezione EmptyStackException Vediamo pertanto la classe che realizza una Pila di interi su una lista concatenata. 12
13 Pila su lista concatenata public class PilaListaConc { // Pila di interi realizzata con // lista concatenata private ElemIntero primo = null; public boolean vuota() {// isempty() if(primo == null) return true; else return false; Pila su lista concatenata public void inserisci (int elem) { // push ElemIntero nuovo = new ElemIntero(); nuovo.next= primo; nuovo.info=elem; primo = nuovo; Pila su lista concatenata public void estrai() {// pop if (!vuota() ) primo = primo.next; else throw new EmptyStackException(); public int testa () {// top if (!vuota() ) return primo.info; else throw new EmptyStackException(); Pila su lista concatenata /** Classe interna: la classe e' privata ma le sue variabili d'istanza sono visibili ai metodi della classe PilaListaConc */ private class ElemIntero { int info; ElemIntero next; //fine PilaListaConc Prestazioni della Pila sulle due strutture di dati lista concatenata array 1) isempty: if( ) O(1) O(1) 2) pop: primo=primo.next O(1) O(1) sp 3) top: restituisce un valore O(1) O(1) 4) push: nuovo +2 assegnazioni raddoppio se l array è pieno O(1) O(1) in media Strutture di dati per numeri e oggetti 13
14 Strutture di dati per numeri e oggetti Come abbiamo portato agli oggetti le proprietà dei numeri (Misurabile, Comparable) così utilizziamo le strutture di dati per memorizzare sia numeri che oggetti: array di numeri e array di oggetti, lista concatenata di numeri e lista concatenata di oggetti. In realtà dovremmo dire: array e lista concatenata di riferimenti a oggetti. Infatti la struttura di dati gestisce i riferimenti per le operazioni di inserimento, cancellazione, ecc. Array numeri oggetti Numeri e oggetti campi Lista concatenata numeri oggetti Numeri e oggetti Strutture di dati per numeri e oggetti Quando vogliamo capire come funziona una struttura di dati o cosa fa un TDA, ci basta trattare numeri. Per utilizzare gli oggetti aggiungeremo al TDA e alla struttura di dati le caratteristiche dell oggetto. Esempio. Abbiamo visto un array per memorizzare informazioni di tipo Stud, che riguardavano gli studenti. Per accedere al campo matricola dell i-esimo studente corso23[i].matricola(). Strutture di dati per numeri e oggetti Se vogliamo costruire una lista concatenata per informazioni di tipo Stud dovremo definire il nodo: class ElemStud{ Stud info; ElemStud next; e per accedere al campo matricola da un riferimento a che vede il nodo: a.info.matricola() 14
15 Una Coda è un TDA ad accesso limitato. Si può accedere al primo elemento della Coda, detto testa e all ultimo elemento detto coda. Le sue funzioni sono: verifica se la coda è vuota: isempty guarda la testa: front inserisci in coda: enqueue estrai la testa: dequeue In una Coda gli oggetti possono essere inseriti ed estratti secondo un comportamento definito FIFO: First In First Out il primo inserito è il primo a uscire Il nome ricorda una fila in attesa : viene estratto l elemento che si trova in coda da più tempo, testa. Gli assiomi assomigliano a quelli della Pila: verifica se la Coda è vuota: isempty guarda la testa: top, front estrai un elemento (la testa): pop, dequeue inserisci un elemento: push (testa), enqueue (coda) Solo l inserimento è diverso: nella Pila si inserisce in testa, nella Coda alla fine. La Coda si può realizzare su array riempito solo in parte oppure su lista concatenata. Realizziamo la Coda su array. Nella Pila si estraeva e si inseriva da un unica parte: l estremo destro dell array sp-- sp++ Nella Coda decidiamo di: inserire a destra e di estrarre a sinistra. Costruiamo l array: int v[] = new int[6]; int qp; //queue pointer: prima posizione libera qp = 0; //Coda vuota; Per accedere alla testa: restituire v[0] Per inserire un elemento in coda: v[qp] = valore; qp++; Se la Coda è piena si effettua il raddoppio. Per togliere la testa ed avere la nuova testa nella prima posizione (qp=0) si devono ricopiare all indietro gli elementi: qp--; for(int i = 0; i<qp; i++) v[i] = v[i+1]; 15
16 Questa realizzazione, efficiente per la Pila, è poco efficiente per la Coda. Nella Pila tutte le operazioni sono O(1), tranne inserisci che è O(1) in media. Nella Coda le operazioni sono O(1), tranne inserisci che è O(1) in media (raddoppio) e togli che è O(n): infatti per mantenere la struttura compatta, si devono sempre spostare tutti gli elementi. Per realizzare una Coda più efficiente usiamo due indici. Un indice vede il primo elemento, l altro indice vede l ultimo. L ultimo rappresenta la prima posizione libera in cui inserire un nuovo elemento (inserimento in coda); il primo è la testa. L array è riempito nella parte centrale. primo ultimo Abbiamo quindi: int primo, ultimo; primo = 0; //testa ultimo = 0; //prima posizione libera Coda vuota: primo == ultimo la prima posizione libera è la testa della coda accedere alla testa (se non è vuota): restituire v[primo] togliere la testa (se non è vuota): primo ++; inserire un elemento, in coda: v[ultimo] = valore; ultimo++; e se l array è pieno si raddoppia In tale modo tutte le operazioni sono O(1) tranne inserisci che è O(1) in media: la realizzazione con due indici è più efficiente. Rimane un problema. Supponiamo che l array abbia 10 componenti (i=0,1, 2,..., 9), si inizia con coda vuota: primo=0 e ultimo=0. Eseguiamo 10 operazioni di inserimento: ultimo=10, che rappresenta Coda piena e per un prossimo inserimento si dovrà eseguire il raddoppio. Eseguiamo 10 operazioni di estrazione: primo=ultimo, che rappresenta Coda vuota. Ora vogliamo inserire un nuovo dato: poiché ultimo = 10 si effettua il raddoppio, anche se la Coda è vuota: in tale modo lo spazio va perduto e se continuiamo in questo modo, occupiamo spazio per rappresentare Code vuote. Si risolve il problema con la tecnica dell array circolare: se c è posto prima non si effettua il raddoppio. 16
17 Quando ultimo==v.length invece del raddoppio ritorna al valore iniziale, in tale modo si recupera lo spazio lasciato libero dall eliminazione degli elementi, facendo il giro : ultimo primo Aritmetica modulo m. Siano a ed m due numeri naturali, indichiamo con a mod m il resto della divisione a/m Se m = 10 abbiamo: per a < m a mod m = a per a m ritroviamo come resti i valori compresi tra 0 e 9 Esempio. 1/10 resto 1 quoziente 0 3/10 resto 3 9/10 resto 9 10/10 resto 0 quoziente 1 24/10 resto 4 quoziente 2 Dobbiamo trovare un modo per calcolare l incremento di primo e di ultimo per fare il giro. Per costruire il successivo (dobbiamo gestire primo++ e ultimo++) costruiamo un metodo per calcolare il resto della divisione del successivo con la dimensione dell array (modulo la dimensione dell array): int incremento(int n){ return((n+1)%v.length); Invece di: primo++ incremento(primo) ultimo++ incremento(ultimo) Rimane ancora un problema. Per raddoppiare non si dovrà più vedere se ultimo==v.length ma se incremento(ultimo)==primo così consideriamo anche il caso in cui possiamo avere fatto tutto il giro (ultimo<primo). Rimane (giustamente) un posto libero prima di fare il raddoppio. Ma cosa succede nel raddoppio se avevamo fatto il giro? L array si raddoppia a destra, e la Coda è nella prima metà e non è ben memorizzata; dobbiamo quindi ricopiare la prima parte dalla testa fino al valore di ultimo (escluso) nella seconda metà: 17
18 public void inserisci(int elem) { /**enqueue: inserimento in coda: in media O(1)*/ if (incremento (ultimo) == primo){ //Coda piena: raddoppio int[] tmp = new int[2*vett.length]; for (int i = 0; i < vett.length; i++) tmp[i] = vett[i]; vett = tmp; if (ultimo < primo) {/** se gli ultimi elementi inseriti sono all inizio dell array e i primi verso la fine */ /**dopo il ridimensionamento la coda "funziona" male; si sposta nella seconda meta dell'array la parte che si trova all'inizio */ for (int i = 0; i < ultimo; i++) vett[vett.length/2 + i]=vett[i]; ultimo = ultimo + vett.length/2; //fine if //fine if vett[ultimo] = elem; ultimo = incremento(ultimo); 18
Conversioni di tipo fra sottoclasse e superclasse
Conversioni di tipo fra sottoclasse e superclasse Può esserci la necessità di memorizzare un riferimento di una sottoclasse in un riferimento a superclasse. È possibile? Abbiamo visto l invocazione del
DettagliConversioni di tipo fra sottoclasse e superclasse
Conversioni di tipo fra sottoclasse e superclasse Conversioni di tipo fra sottoclasse e superclasse Può esserci la necessità di memorizzare un riferimento di una sottoclasse in un riferimento a superclasse.
DettagliCoda su lista concatenata
Cosa studiare nel libro Capitolo 7: tutto tranne Argomenti avanzati 7.2 e 7.5 Capitolo 8: solo 8.5, 8.6, 8.7, 8.8 e Argomenti avanzati 8.1 Capitolo 9: tutto fino a 9.6 (escluso) Capitolo 10: tutto fino
DettagliSOMMARIO STACK. STACK: specifica STACK
SOMMARIO STACK Pila (stack): una struttura dati lineare a cui si può accedere soltanto mediante uno dei suoi capi per memorizzare e per estrarre dati. Specifica (descrizione). Implementazione (realizzazione).
DettagliStruttura di dati lista concatenata
Struttura di dati lista concatenata Lista concatenata Consideriamo una nuova modalità di memorizzare i dati in cui l accesso non avviene più tramite un indice, che individua la posizione del dato nella
DettagliGenericContainer. Archivio. Interface GenericContainer. Interface GenericContainer Possiamo scrivere: Definizione del TDA contenitore generico :
Interface GenericContainer Definizione del TDA contenitore generico : GenericContainer public interface GenericContainer{ boolean isempty(); void makeempty(); /* si puo' aggiungere int getsize(); per sapere
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 09 ADT: Lista, Pila, Coda A. Miola Marzo 2007 http://www.dia.uniroma3.it/~java/fondinf2/ ADT: Lista, Pila, Coda 1 Contenuti Tipo
Dettaglitipi di dato astratti
tipi di dato astratti A. FERRARI ADT Un tipo di dato astratto o ADT (Abstract Data Type) è un tipo di dato le cui istanze possono essere manipolate con modalità che dipendono esclusivamente dalla semantica
DettagliArray. Walter Didimo
Array Walter Didimo Un problema ricorrente Gli strumenti di programmazione che abbiamo visto sin qui non sono ancora sufficienti per risolvere tutti i problemi di base Consideriamo ad esempio il seguente
DettagliIn questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi.
In questa lezione Strutture dati elementari: Pila Coda Loro uso nella costruzione di algoritmi. 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni
DettagliCasi di prova. Il problema dell ordinamento. Casi di prova. Casi di prova. Casi di prova
Casi di prova Casi di prova Quando si vuole testare un algoritmo si devono costruire vari casi di prova. Invece di eseguire il programma più volte si può costruire un file di dati contenente tutti i casi
DettagliTipi di dati astratti
Tipi di dati astratti ADT 1 Dati strutturati e algoritmi Una struttura di dati è un insieme di regole per organizzare e manipolare dei dati Un algoritmo è un procedimento composto in passi elementari in
DettagliTIPO DI DATO ASTRATTO
TIPO DI DATO ASTRATTO Tipo di dato astratto Esempio: Vogliamo rappresentare un sistema di prenotazione di esami universitari. Dati immagazzinati: prenotazioni esami Operazioni supportate: prenota(esame,
DettagliLa struttura dati CODA
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 2016-2017 La struttura dati CODA Pietro Di Lena - pietro.dilena@unibo.it Introduzione Una coda (o queue) è una struttura dati astratta
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Inserimento in ordine
DettagliTrasformare array paralleli in array di record
Trasformare array paralleli in array di record Un array è una struttura di dati omogenea: gli elementi dell array sono tutti dello stesso tipo (che è il tipo dell array). A volte è necessario gestire informazioni
DettagliTrasformare array paralleli in array di record
Trasformare array paralleli in array di record Un array è una struttura di dati omogenea: gli elementi dell array sono tutti dello stesso tipo (che è il tipo dell array). A volte è necessario gestire informazioni
DettagliStrutture dati. Il che cosa e il come. F. Damiani - Alg. & Lab. 04/05
Strutture dati Il che cosa e il come Il che cosa ed il come Struttura dati: descrive come sono organizzati i dati e come sono realizzate le operazioni su di essi (cioe come si accede ai dati) Specifica
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 33 Le liste in C struct nodo { int info; struct nodo *next; }; typedef struct nodo Nodo; typedef Nodo *PNodo; Pila (Stack ) La struttura
DettagliTrasformare array paralleli in array di record
Trasformare array paralleli in array di record Trasformare array paralleli in array di record Un array è una struttura di dati omogenea: gli elementi dell array sono tutti dello stesso tipo (che è il tipo
DettagliAlgoritmi e Strutture Dati
Strutture Elementari Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 29 ottobre 2008 Strutture Dati Astratte Il concetto di dato Il concetto
DettagliLINKEDLIST: implementazione iteratore. LINKEDLIST: iteratore INNERITERATOR INNERITERATOR
LINKEDLIST: iteratore Il metodo iterator() restituisce un oggetto iteratore sulla lista per scandire gli elementi in sequenza a partire dall inizio della lista. public Iterator iterator() { return new
DettagliLaboratorio di Programmazione
Laboratorio di Programmazione (Laurea triennale in matematica) Lezione 25 ADT (Abstract Data Types) tipo di dato astratto Un ADT è un modello matematico con una collezione di operatori definiti su tale
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino A.A. 2006/07 Il concetto di dato Il concetto di tipo di dato Insertion Sort for j 2 to lenght[a]
Dettaglisemplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente
Liste doppie Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica semplice: doppia: Gli
DettagliAlgoritmi e Strutture Dati
Maria Rita Di Berardini 2, Emanuela Merelli 1 1 Dipartimento di Matematica e Informatica Università di Camerino 2 Polo di Scienze Università di Camerino ad Ascoli Piceno Il concetto di dato Il concetto
DettagliOrario delle lezioni LABORATORIO TEORIA. mercoledì. martedì aula P/4. lab Turing. Strutture Dati
Orario delle lezioni LABORATORIO martedì 15.00-18.00 TEORIA mercoledì 16.00 18.00 lab Turing aula P/4 Libro di testo Data Structures & Algorithms in Java Michael T. Goodrich Roberto Tamassia John Wiley
DettagliCapitolo 9. Tipi enumerativi, tipi generici e interfacce. c 2005 Pearson Education Italia Capitolo 9-1 / 73
Capitolo 9 Tipi enumerativi, tipi generici e interfacce c 2005 Pearson Education Italia Capitolo 9-1 / 73 Sommario: Tipi enumerativi, tipi generici e interfacce 1 Definizione di tipi enumerativi La classe
DettagliCalcolare x n = x x x (n volte)
Calcolare x n = x x x (n volte) Abbiamo bisogno di: una variabile ris in cui ad ogni iterazione del ciclo si ha un risultato parziale, e che dopo l ultima iterazione contiene il risultato finale; una variabile
DettagliSi usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato
Le tavole hash È il modo con cui sono realizzati gli HashSet Si usano quando serve accesso rapido sia in lettura che in scrittura su un insieme non ordinato Principio base Gli array hanno le caratteristiche
DettagliFondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati
Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati Paolo Torroni Dipartimento di Elettronica, Informatica e Sistemistica Università degli Studi di Bologna Anno Accademico 2008/2009 Sommario
DettagliIl vettore e la lista concatenate (o catena) sono due esempi di strutture interne.
Strutture dati PILA e CODA Le strutture dati si dividono in interne e astratte. Quelle astratte sono rappresentazioni dei dati di un problema che rispecchiano le proprietà dei dati e le relazioni usate
DettagliLe liste con array. Rimuovere la perla rossa costringe a spostare molte altre perle. Dove mettere la perla verde se si è esaurito il filo?
Liste Linkate Le liste con array Volendo usare una metafora, l implementazione delle liste tramite array è come infilare le perle (gli oggetti della lista) in un filo di lunghezza predefinita. E chiaro
DettagliLe liste. Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132
Le liste Prof. Francesco Accarino IIS Sesto San Giovanni Via Leopardi 132 Le Liste Le liste non sequenziali (concatenate) sono costituite da elementi che vengono memorizzati in memoria centrale non uno
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa 04 Introduzione ai Tipi astratti di dato A. Miola Febbraio 2007 http://www.dia.uniroma3.it/~java/fondinf2/ Introduzione ADT 1
DettagliAlberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
Dettagli10/10/2016. Caratteristiche degli array. Il tipo RECORD. Il record. LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica
Caratteristiche degli array Principali caratteristiche degli array: LABORATORIO DI PROGRAMMAZIONE 2 Corso di laurea in matematica Marco Lapegna Dipartimento di Matematica e Applicazioni Universita degli
DettagliFondamenti di Informatica II
Università degli studi di Messina Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica e delle Telecomunicazioni Fondamenti di Informatica II Tipi di dati astratti(adt)- seconda parte Coda Struttura
DettagliIntroduzione. Liste. Strutture ricorsive (2) Strutture ricorsive (1) DD p KP p
Introduzione Liste DD p. 449-474 KP p.397-424 Abbiamo fin ora studiato strutture dati con dimensione fissa: vettori e matrici strutture Introduciamo ora le strutture dati dinamiche (liste concatenate):
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E16 Esercizi Strutture Collegate e Oggetti C. Limongelli Maggio 2012 1 Contenuti q Verifiche universali ed esistenziali su strutture
DettagliIn una coda gli inserimenti si fanno alla fine e le cancellazioni all inizio! First In First Out
In una coda gli inserimenti si fanno alla e e le cancellazioni all inizio! First In First Out Progr II - Coda 1 CODA: i requisiti Una coda (queue) è un ADT in cui le operazioni sono inserimenti e cancellazioni
DettagliTipi di dato e Strutture dati elementari
Tipi di dato e Strutture dati elementari Ing. Paolo Craca Anno accademico 2007/2008 Tipi di dato e Strutture dati elementari 1 / 40 Cosa vedremo in questo seminario 1 Introduzione 2 Pile 3 Code 4 5 Bibliografia
DettagliFondamenti di Informatica
Strutture dati complesse Esempi di strutture dati complesse analizzate in questa lezione: Fondamenti di Informatica 21. Strutture di dati complesse in C++ Array di puntatori Pila (Stack) Coda (queue) Liste
DettagliListe concatenate. Violetta Lonati
Liste concatenate Violetta Lonati Università degli studi di Milano Dipartimento di Informatica Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica 2 novembre 2017 Violetta Lonati Liste
DettagliAd esempio, creazione di una lista di numeri interi e di una lista di oggetti di tipo Persona:
List e LinkedList La classe List consente di creare un array dinamico di oggetti di un certo tipo, specificato in fase di dichiarazione dell oggetto lista. Si dice che l array è dinamico nel senso
DettagliListe concatenate e allocazione dinamica
Liste concatenate e allocazione dinamica Laboratorio di Programmazione I Corso di Laurea in Informatica A.A. 2018/2019 Argomenti del Corso Ogni lezione consta di una spiegazione assistita da slide, e seguita
DettagliStampare una Pila. Stampare una Pila. Stampare una Pila. Stampare una Pila
Stampare una Pila Stampare una Pila Quando si stampa un Pila gli elementi appaiono nell ordine inverso a quello di inserimento; inoltre la Pila si vuota. Supponiamo di avere introdotto nella Pila i valori
DettagliStampare una Pila. Stampare una Pila. Stampare una Pila. Stampare una Pila. Pila o Stack
Stampare una Pila Stampare una Pila Quando si stampa un Pila gli elementi appaiono nell ordine inverso a quello di inserimento; inoltre la Pila si vuota. Supponiamo di avere introdotto nella Pila i valori
DettagliProf. E. Occhiuto INFORMATICA 242AA a.a. 2010/11 pag. 1
Operazioni sulle liste Definiamo una serie di procedure e funzioni per operare sulle liste. Usiamo liste di interi per semplicità, ma tutte le operazioni sono realizzabili in modo del tutto analogo su
DettagliAlgoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Capitolo 4 - Strutture di dati elementari This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License. To view a copy of this license, visit
DettagliListe. Costo operazioni Tutte le operazioni hanno costo O(1)
Liste Liste (List, Linked List) Una sequenza di nodi, contenenti dati arbitrari e 1-2 puntatori all'elemento successivo e/o precedente Contiguità nella lista contiguità nella memoria Costo operazioni Tutte
DettagliInterfacce. Esempio: interfaccia I con una sola funzione g() public interface I {
Interfacce Una interfaccia è un astrazione per un insieme di funzioni pubbliche delle quali si definisce solo la segnatura, e non le istruzioni. Un interfaccia viene poi implementata da una o più classi
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA7 B3 Gestione di una coda 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Tecnica di allocazione dinamica Concetto di coda e operazioni relative
DettagliAltri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa E17. C. Limongelli Maggio 2012
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E17 C. Limongelli Maggio 2012 1 Contenuti q Definizione di classi con ereditarietà q Uso di tipi di dati astratti q Ricorsione
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliArray e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica. Dispensa 17. A. Miola Gennaio 2012
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa 17 A. Miola Gennaio 2012 1 Contenuti q Array paralleli q Array e oggetti q Ricerca sequenziale q Ricerca binaria q Fusione di sequenze
DettagliCORSO DI PROGRAMMAZIONE
ISTITUTO TECNICO INDUSTRIALE G. M. ANGIOY SASSARI CORSO DI PROGRAMMAZIONE PILE E CODE DI DATI DISPENSA 11.02 11-02_Pile_Code_[ver_15] Questa dispensa è rilasciata sotto la licenza Creative Common CC BY-NC-SA.
DettagliINTRODUZIONE INTRODUZIONE TABELLE HASH FUNZIONE HASH
INTRODUZIONE INTRODUZIONE Una tabella hash è una struttura dati che permette operazioni di ricerca e inserimento molto veloci: in pratica si ha un costo computazionale costante O(1). Si ricorda che la
DettagliStruttura dati astratta Coda
CODE Struttura dati astratta Coda La coda o queue è una struttura dati astratta in cui l'inserimento e l estrazione sono consentite solo in specifiche posizioni; in particolare, l'inserimento è consentito
DettagliALGORITMI E STRUTTURE DATI
Esercitazioni del corso di: ALGORITMI E STRUTTURE DATI Tutor: Francesca Piersigilli email: francesca.piersigilli@unicam.it Strutture dati elementari Tecniche di organizzazione dei dati: scelta della struttura
DettagliAlgoritmi di Ricerca. Esempi di programmi Java. Prof. Angela Bonifati
Passaggio dei parametri in Java Nel seguente esempio public class parametri2 public static void main(string args[]) int x = 1; int y; double d[] = new double[2]; d[0] = 25; y= metodo1(d, x); System.out.println("Il
DettagliPile e Code. Definiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione.
Pile e Code lezione 4 Collezioni Defiamo una collezione come un gruppo di oggetti, detti gli elementi della collezione. Durante il corso defiremo delle tecniche di base per gestire modo efficiente collezioni
Dettaglisemplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente
1 of 23 22/11/2004 10.23 Liste: semplici ogni elemento contiene un riferimento al successivo doppie ogni elemento contiene un riferimento al successivo e al precedente Rappresentazione grafica Lista semplice:
DettagliIl Linguaggio Java. Le interfacce
Il Linguaggio Java Le interfacce Ordinamento dei conti PROBLEMA: si vogliono ordinare i libretti di risparmio (SavingsAccount) in base al loro tasso di interesse REQUISITO: La classe dovrebbe essere ordinabile,
DettagliCorso di Laurea Ingegneria Informatica Fondamenti di Informatica 2
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E14 F. Gasparetti, C. Limongelli Maggio 2012 1 Verifica presenza di elementi comuni V1 - Date due liste di stringhe scrivere
DettagliFondamenti di informatica T-1 (A K) Esercitazione 9: array
Fondamenti di informatica T-1 (A K) Esercitazione 9: array AA 2018/2019 Tutor Lorenzo Rosa lorenzo.rosa@unibo.it 2 Esercitazione 9 Introduzione al calcolatore e Java Linguaggio Java, basi e controllo del
Dettaglipublic static boolean occorre (int[] a, int n) { int i = 0; boolean trovato = false;
Metodi iterativi con array monodimensionali 1. Scrivere un metodo che, dato un array di interi a, restituisce il valore minimo in a. public static int minimo (int[] a) { int min = a[0]; for (int i=1; i
DettagliListe concatenate. Collezione ordinata di nodi. Carlo Paolo Simona. Anna. ciascun nodo contiene due riferimenti:
Liste concatenate Collezione ordinata di nodi head tail next next next next element element element element Ø Anna Carlo Paolo Simona ciascun nodo contiene due riferimenti: - un riferimento "element" a
DettagliAltri Esercizi. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2. Dispensa E09. C. Limongelli Marzo 2008
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2 Dispensa E09 Altri Esercizi C. Limongelli Marzo 2008 http://www.dia.uniroma3.it/~java/fondinf2/ Altri Esercizi 1 Contenuti!Definizione
DettagliProgrammazione II canale AD -- Esonero del 21/04/2006
Esercizio 1 (Sbarramento ) Si scriva una funzione ricorsiva che riceve in input una lista concatenata di interi L e restituisce una nuova lista concatenata di interi L1 in cui l elemento j-simo ( j 1)
DettagliLaboratorio di Programmazione Lezione 3. Cristian Del Fabbro
Laboratorio di Programmazione Lezione 3 Cristian Del Fabbro Prossima lezione GIOVEDÌ 12 NOVEMBRE ORE 14:00 Array a.k.a. vettore Un array è una collezione ordinata di dati omogenei (cioé sono tutti dello
DettagliIn questa lezione Strutture dati elementari: Pila Coda
In questa lezione Strutture dati elementari: Pila Coda 1 strutture dati (astratte) Una struttura dati astratti consiste di uno o più insiemi con delle operazioni che li modificano (insiemi dinamici). Le
DettagliLa classe java.lang.object
La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita
DettagliHeap e Code di Priorità
Heap e Code di Priorità heap heap = catasta condizione di heap 1. albero binario perfettamente bilanciato 2. ogni nodo contiene una chiave maggiore o eguale di quelle presenti negli eventuali figli non
DettagliInformatica 3. LEZIONE 13: Liste doppie, pile e code. Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda
Informatica 3 LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Informatica 3 Lezione 13 - Modulo 1 Free list Free list Le funzioni di sistema
Dettaglipublic BankAccount() { balance = 0; } public BankAccount(double initialbalance) { balance = initialbalance; }
Il Linguaggio Java Le interfacce La classe BankAccount public class BankAccount { public BankAccount() { balance = 0; public BankAccount(double initialbalance) { balance = initialbalance; public void deposit(double
DettagliEsercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018
Esercitazioni di Fondamenti di Informatica - Lez. 8 27/11/2018 Esercizi sull allocazione dinamica della memoria in C Il codice di questi esercizi é contenuto nella cartella parte1 1. Implementare una lista
DettagliEsempi in Java di program.ne O-O
Esempi in Java di program.ne O-O Ereditarietà Polimorfismo statico e dinamico Esercitazione laboratorio Interfaccia Comparable e Comparator 1 Gerarchia di ereditarietà Persona IS_A Docente Studente Tecnico
DettagliPile e code. ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO
Pile e code ADT e strutture dati per la rappresentazione di sequenze ad accesso LIFO e FIFO Le Pile Una pila è una struttura dati lineare, alla quale gli elementi possono essere aggiunti o sottratti da
DettagliLe liste. Le liste linkate
Le liste Le liste linkate Molto spesso bisogna gestire insiemi di oggetti dello stesso tipo. Un modo molto semplice per tenere in memoria tali insiemi consiste nel creare un array per contenerli. Nome
DettagliAlgoritmi di Ricerca. Esempi di programmi Java
Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare
DettagliEreditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction...
DettagliEreditarietà (ultima)
Ereditarietà (ultima) Classi astratte Un ibrido tra classi e interfacce Hanno alcuni metodi implementati normalmente, altri astratti Un metodo astratto non ha implementazione abstract class AccountTransaction
DettagliAlgoritmi e Programmazione Avanzata. Pile e code. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino
Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2001/2002 APA - 2 1 Sommario ADT Pile Code. A.A. 2001/2002 APA - 3 ADT Le regole che
DettagliIl TDA Map. Tabelle hash
Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale
DettagliDefinizione informale. Il TDA Map memorizza coppie formate da una chiave k e da un valore v. La coppia è chiamata entry. Ogni chiave deve essere unica
Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale
DettagliIl TDA Map. Definizione informale. I metodi del TDA Map 2. I metodi del TDA Map 1. Interfaccia Map 1 NO_SUCH_KEY. Tabelle hash
Il TDA Map Tabelle hash Definizione informale Il TDA Map memorizza coppie formate da una chiave k e da un valore v La coppia è chiamata entry Ogni chiave deve essere unica Questa è la differenza principale
Dettagli4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste
4 Le liste collegate 4.0 Le liste collegate c Diego Calvanese Fondamenti di Informatica Corso di Laurea in Ingegneria Elettronica A.A. 2001/2002 4.0 0 4 Le liste collegate Rappresentazione di liste 4.1
DettagliImplementazione Java di un ADT
Implementazione Java di un ADT Primo passo definire l'interfaccia (API) dell' ADT (l'api descrive i nomi dei metodi che l'adt supporta e come essi sono dichiarati e usati) Secondo passo scrivere il codice
DettagliFondamenti di Informatica T-1
Fondamenti di Informatica T-1 Interfaccia Comparable e Collezioni Tutor: Allegra De Filippo allegra.defilippo@unibo.it a.a. 2015/2016 Fondamenti di Informatica T-1 Allegra De Filippo 1 / 22 Interfaccia
DettagliPile e code. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino
Pile e code Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino Sommario ADT Pile Code. A.A. 2002/2003 APA - Pile e code 2 Politecnico di Torino Pagina 1 di 23 Sommario
DettagliCorso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA7 B1 Gestione di liste 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Tecnica di allocazione dinamica Gestione di liste Classificazione delle
Dettagli5. Quinta esercitazione autoguidata: liste semplici
22 5. Quinta esercitazione autoguidata: liste semplici 5.1. Liste rappresentate mediante strutture e puntatori (LISTE1.C, LISTE2.C) Scrivere un programma che - costruisce una lista di k interi (con k letto
DettagliInformatica 3. Informatica 3. LEZIONE 13: Liste doppie, pile e code. Lezione 13 - Modulo 1. Free list (2) Free list. Free list
LEZIONE 13: Liste doppie, pile e code Modulo 1: Free list Modulo 2: Lista doppia Modulo 3: Pila Modulo 4: Coda Lezione 13 - Modulo 1 Free list Politecnico di Milano - Prof. Sara Comai 1 Politecnico di
DettagliOCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO
CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER
DettagliEsercitazione 8. Corso di Tecniche di programmazione. Laurea in Ingegneria Informatica
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 8 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti
DettagliAlgoritmi e Strutture di Dati
Algoritmi e Strutture di Dati Tipi astratti di dato (pile e code realizzate tramite array) m.patrignani Nota di copyright queste slides sono protette dalle leggi sul copyright il titolo ed il copyright
DettagliOggetti e classi. La classe è un modello (un contenitore) che definisce la forma di un oggetto, specificando:
Classi Oggetti e classi La classe è un modello (un contenitore) che definisce la forma di un oggetto, specificando: Come è fatto (i dati) Quali operazioni si possono fare con- e sull oggetto (le funzioni)
Dettagli