La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro.

Presentazioni simili


Presentazione sul tema: "AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro."— Transcript della presentazione:

1 AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro

2 AlgoLab - Pile e Code Pile: definizione informale Una pila è una struttura dati lineare, cui gli elementi possono essere aggiunti o sottratti da un solo estremo (LIFO).

3 AlgoLab - Pile e Code Operazioni sulle pile Una pila (stack) si definisce astrattamente come una struttura dati su cui siano definite alemeno quattro operazioni: 1.Push(e,s) :aggiunge e alla pila s 2.Pop(s) :elimina l’elemento emergente da s 3.Top(s) :ritorna il valore dell’emergente di s 4.IsEmpty(s):ritorna true se s non ha elementi. Nota: se s è vuota, Pop(s) e Top(s) sono indefinite.

4 AlgoLab - Pile e Code L’interfaccia Stack interface Stack { void push(Object newitem); // aggiunge newitem come emergente void pop(); // rimuove l’emergente dalla pila Object top(); // ritorna l’emergente senza rimuoverlo boolean empty(); // true se la pila e’ vuota }

5 AlgoLab - Pile e Code L’interfaccia List interface List { void cons (Object newitem); // aggiunge newitem in testa alla lista boolean insert(Object newitem, int index); // inserisce newitem alla pos. index; false // se index > length() boolean delete(int index); // rimuove l’elemento di pos. index; false se // index not in 0..length()-1 Object retrieve(int index); // pre: index in 0..length()-1 // post: ritorna l’elemento di indice index public int length (); // ritorna la lunghezza }

6 AlgoLab - Pile e Code Le pile implementate come liste Supponendo di aver riscritto SList in modo tale che implementi l’interfaccia List, e quindi sia generica (elementi di tipo Object ): class StackByList extends SList implements Stack { public void push(Object newitem) {cons(newitem);} public void pop() {delete(0);} public Object top() {return retrieve(0);} public boolean empty() {return length() == 0;} }

7 AlgoLab - Pile e Code La gerarchia dei tipi e delle classi L’implementazione delle pile presentata si basa dunque sulla gerarchia (interfacce e relazioni di implementazione in rosso, classi e relazioni di ereditarietà in blu): ListStack SList StackByList

8 AlgoLab - Pile e Code Notazione polacca postfissa Nella notazione polacca postfissa per le espressioni aritmetiche un operatore segue i suoi operandi. E’ definita dalla grammatica: ::= | Esempi: (7 + 3) £ 5si traduce in 7 3 + 5 £ 7 + 3 £ 5si traduce in 7 3 5 £ +

9 AlgoLab - Pile e Code Algoritmo di valutazione Valuta (Stringa espr) // espr è fatta di parole separate da spazi s := pila vuota while (scansione di espr non è finita) e := prossima parola di espr; if (e è un numerale) then Push(e,s) else // e è un operatore n := Top(s); Pop(s);// l’ordine di lettura ed eliminaz. m := Top(s); Pop(s);// dalla coda è importante … op :=  oppure  a seconda di e; Push(m op n, s)// … qui return Top(s). // se espr è un’espr. in not. polacca, s ha un solo el.

10 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 top

11 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 8 top

12 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 8 7 top

13 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 8 7 3 top

14 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 8 10 top

15 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 80 top

16 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 80 2 top

17 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     4 40 top

18 AlgoLab - Pile e Code Esecuzione dell’algoritmo 4 8 7 3 +     44 top

19 AlgoLab - Pile e Code Code: definizione informale Le code sono strutture lineari i cui elementi si inseriscono da un estremo e si estraggono dall’altro (FIFO)

20 AlgoLab - Pile e Code Operazioni sulle code Una coda (queue) si definisce astrattamente come una struttura dati su cui siano definite alemeno le operazioni: Enqueue(e,q) :aggiunge e come ultimo in q Dequeue(q) :elimina il primo in q Head(q) :ritorna il valore del primo in q IsEmpty(q):ritorna true se q non ha elementi. Nota: se q è vuota, Dequeue(q) e Head(q) sono indefinite.

21 AlgoLab - Pile e Code Code realizzate con vettori (1) q fr coda vuota 715 q fr 15 q fr Dequeue(q)

22 AlgoLab - Pile e Code Code realizzate con vettori (2) 52 q fr Enqueue(9,q) 952 q fr L’indice della locazione successiva (sia per f che per r) si calcola: i + 1 mod n (n = lunghezza del vettore)

23 AlgoLab - Pile e Code Code realizzate con vettori (3) 9352 q fr Condizione necessaria perché una coda di lunghezza n sia piena è: r + 1 mod n = f Tale condizione tuttavia non è sufficiente, dato che si verifica anche in quello di coda vuota coda piena q fr coda vuota

24 AlgoLab - Pile e Code Code realizzate con liste front rear … Come si realizza tutto questo in Java, sfruttando il più possibile le interfacce e l’ereditarietà?


Scaricare ppt "AlgoLab - Pile e Code Pile e code Laboratorio di Algoritmi 02/03 Prof. Ugo de’ Liguoro."

Presentazioni simili


Annunci Google