il nostro esempio guida: la costruzione di uno stack
DESCRIPTION
Il nostro esempio guida: La costruzione di uno stack. Costruiamo uno stack. stackapplet.html. #include #include #define DEBUG struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; } ;. contenuto. size. marker. 16. 5. 12. 2. - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/1.jpg)
1
Il nostro esempio guida:La costruzione di uno stack
![Page 2: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/2.jpg)
2
Costruiamo uno stack
stackapplet.html
![Page 3: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/3.jpg)
3
#include <iostream.h>#include <cassert>#define DEBUG
struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto;} ;
marker
size
contenuto
212
516
![Page 4: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/4.jpg)
4
Pila * crea(int initialSize) {//crea una Pila cout<<"entro in crea"<<endl; Pila * s= new Pila ; s->size=initialSize; s->defaultGrowthSize=initialSize; s->marker=0; s-> contenuto=new int[initialSize]; return s;}
![Page 5: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/5.jpg)
5
void distruggi(Pila * s) {//distruggi lo Pila cout<<"entro in destroy"<<endl; delete [](s->contenuto); delete s;}
![Page 6: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/6.jpg)
6
void cresci(Pila *s, int increment){//aumenta la dimensione dello Pila cout<<"entro in cresci"<<endl; s->size+=increment; int * temp=new int[s->size]; for (int k=0; k<s->marker;k++) { temp[k]=s->contenuto[k]; } delete [](s->contenuto); s->contenuto=temp;}
![Page 7: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/7.jpg)
7
void inserisci(Pila *s, int k) {//inserisci un nuovo valore cout<<"entro in inserisci"<<endl; if (s->size==s->marker)
cresci(s,s->defaultGrowthSize); s->contenuto[s->marker]=k; s->marker++;}
![Page 8: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/8.jpg)
8
int estrai(Pila *s) {//estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(s->marker>0); return s->contenuto[--(s->marker)];}
![Page 9: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/9.jpg)
9
void stampaStato(Pila *s) { //stampa lo stato dello Pila cout <<"=================="<< endl; cout << "size = "<<s->size<<endl; cout << "defaultGrowthSize = “
<<s->defaultGrowthSize<<endl; cout << "marker = "<<s->marker <<endl; for (int k=0;k<s->marker;k++)
cout << "["<<(s->contenuto[k])<<"]"; cout << endl; cout <<"=================="<< endl; }
![Page 10: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/10.jpg)
10
Pila * copia(Pila * from) { cout<<"entro in copia"<<endl; Pila * to=crea(from->size); to->defaultGrowthSize=from->defaultGrowthSize; for (int k=0; k<from->marker;k++) { to->contenuto[k]=from->contenuto[k]; } to->marker=from->marker; return to;}
![Page 11: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/11.jpg)
11
int main() { Pila * s=crea(5); cout<<"s";stampaStato(s); for (int k=1; k<10;k++) inserisci(s,k); cout<<"s"; stampaStato(s); Pila * w = copia(s); cout<<"w"; stampaStato(w); for (int k=1; k<8;k++)
cout<<estrai(s)<<endl; cout<<"s"; stampaStato(s); distruggi(s); cout<<"s"; stampaStato(s); for (int k=1; k<15;k++)
cout<<estrai(w)<<endl; cout<<"w";stampaStato(w);}
![Page 12: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/12.jpg)
12
bash-2.02$ gcc Pila.cc -lstdc++ -o Pila.exebash-2.02$ Pila.exeentro in creas==================size = 5defaultGrowthSize = 5marker = 0
==================entro in inseriscientro in inseriscientro in inseriscientro in inseriscientro in inseriscientro in inseriscientro in crescientro in inseriscientro in inseriscientro in inserisci
s==================size = 10defaultGrowthSize = 5marker = 9[1][2][3][4][5][6][7][8][9]==================entro in copiaw==================size = 10defaultGrowthSize = 10marker = 9[1][2][3][4][5][6][7][8][9]==================
![Page 13: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/13.jpg)
13
entro in estrai9entro in estrai8…entro in estrai4entro in estrai3s==================size = 10defaultGrowthSize = 5marker = 2[1][2]==================
entro in distruggis==================size = 1627775824defaultGrowthSize = 1627775824marker = 2[1627775848][1627775848]==================entro in estrai9entro in estrai8…entro in estrai2entro in estrai1entro in estraiassertion "s->marker>0" failed: file "Pila.cc", line 72bash-2.02$
![Page 14: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/14.jpg)
14
#include <Pila.h>int main() { Pila * s=crea(5); cout<<"s"; stampaStato(s);
for (int k=1; k<10;k++) inserisci(s,k); cout<<"s"; stampaStato(s);
Pila * w=s; cout<<"w"; stampaStato(w); for (int k=1; k<8;k++)
cout<< estrai(s)<<endl; cout<<"s"; stampaStato(s); cout<<“w"; stampaStato(w);}
Una copia(troppo)
sbrigativa…
Perchè abbiamo scritto il metodo copia?
![Page 15: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/15.jpg)
15
s==================size = 10defaultGrowthSize = 5marker = 9[1][2] [3][4] [5] [6] [7] [8] [9]================== w==================size = 10defaultGrowthSize = 5marker = 9[1][2] [3][4] [5] [6] [7] [8] [9]================== entro in estrai9entro in estrai8…
…entro in estrai4entro in estrai3s==================size = 10defaultGrowthSize = 5marker = 2[1][2]==================w==================size = 10defaultGrowthSize = 5marker = 2[1][2]==================
![Page 16: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/16.jpg)
16
struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto;} ;
Pila * crea(int initialSize) ;void distruggi(Pila * s) ;Pila * copia(Pila * from) ;void cresci(Pila *s, int increment);void inserisci(Pila *s, int k) ;int estrai(Pila *s) ;void stampaStato(Pila *s) ;
Pila.h
![Page 17: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/17.jpg)
17
struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; int estrai() ;} ;Pila * crea(int initialSize) ;void distruggi(Pila * s) ;Pila * copia(Pila * from) ;void cresci(Pila *s, int increment);void inserisci(Pila *s, int k) ;// int estrai(Pila *s) ; vecchia versionevoid stampaStato(Pila *s) ;
Pila.hversione 2
![Page 18: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/18.jpg)
18
int estrai(Pila *s) {//estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(s->marker>0); return s->contenuto[--(s->marker)];}
Re-implementazione di estrai
int estrai() {//estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(this->marker>0); return this-> contenuto[--(this-> marker)];}
![Page 19: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/19.jpg)
19
int main() { Pila * s=crea(5); cout<<"s";stampaStato(s); for (int k=1; k<10;k++) inserisci(s,k); cout<<"s"; stampaStato(s); Pila * w = copia(s); cout<<"w"; stampaStato(w); for (int k=1; k<8;k++)
//cout<<estrai(s)<<endl;cout<<s->estrai()<<endl;
…}
Re-implementazione del main
![Page 20: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/20.jpg)
20
Re-implementazione di estrai: dove scrivo il codice?
struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; int estrai() { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(this->marker>0); return this->contenuto[--(this->marker)]; }};
![Page 21: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/21.jpg)
21 Re-implementazione di estrai: dove scrivo il codice?
struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; int estrai();};int Pila::estrai() { //estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(this->marker>0); return this->contenuto[--(this->marker)];}
![Page 22: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/22.jpg)
22
int estrai(Pila *s) {//estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(s->marker>0); return s->contenuto[--(s->marker)];}
Re-implementazione di estrai con thisimplicito
int estrai() {//estrai l’ultimo valore cout<<"entro in estrai"<<endl; assert(marker>0); return contenuto[--(marker)];}
![Page 23: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/23.jpg)
23
Pila * crea(int initialSize) { Pila * s= new Pila ; s->size=initialSize; s->defaultGrowthSize=initialSize; s->marker=0; s-> contenuto=new int[initialSize]; return s;}
Re-implementazione di crea
Pila::Pila(int initialSize) { size=initialSize; defaultGrowthSize=initialSize; marker=0; contenuto=new int[initialSize];}
“Il costruttore”
![Page 24: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/24.jpg)
24
void Pila:: distruggi () {//distruggi lo Pila cout<<"entro in distruggi"<<endl; delete []contenuto; delete this;}
Re-implementazione di distruggi
Pila::~Pila() {//distruggi lo Pila cout<<"entro nel distruttore"<<endl; delete []contenuto; // NO! delete this;}
“Il distruttore”
![Page 25: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/25.jpg)
25
int main() { Pila * s=new Pila(5); // OLD: =crea(5) cout<<"s";s->stampaStato(); for (int k=1; k<10;k++) s->inserisci(k); cout<<"s"; s->stampaStato(); Pila * w = s->copia(); cout<<"w"; w->stampaStato(); for (int k=1; k<8;k++)
cout<< s->estrai()<<endl; cout<<"s"; s->stampaStato(); delete s; // OLD: s->distruggi(); cout<<"s"; s->stampaStato(); for (int k=1; k<15;k++)
cout<< w->estrai()<<endl; cout<<"w"; w->stampaStato();}
Re-implementazione del main
![Page 26: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/26.jpg)
26
struct Pila { int size; int defaultGrowthSize; int marker; int * contenuto; Pila(int initialSize) ; ~Pila() ; Pila * copia() ; void cresci(int increment); void inserisci(int k) ; int estrai() ; void stampaStato() ;} ;
Pila.hversione 3
Variabili di istanza,Dati membro
Metodi,Funzioni membro
![Page 27: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/27.jpg)
27
struct Pila { Pila(int initialSize) ;
Pila(); ~Pila() ; void copia(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ; private:
int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment);} ;
Pila.hversione 4
![Page 28: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/28.jpg)
28
class Pila {int size;
int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public:
Pila(int initialSize) ;Pila();
~Pila() ; void copy(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ;} ;
Pila.hversione 5
![Page 29: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/29.jpg)
29
struct Pila { private:
int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public:
Pila(int initialSize) ;Pila();
~Pila() ; void copy(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ;} ;
Pila.h versione 6class Pila { private:
int size; int defaultGrowthSize; int marker; int * contenuto; void cresci(int increment); public:
Pila(int initialSize) ; Pila(); ~Pila() ; void copy(Pila * to) ; void inserisci(int k) ; int estrai() ; void stampaStato() ;} ;
![Page 30: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/30.jpg)
La Pila in Java - 1package strutture;public class Pila { int size; int defaultGrowthSize; int marker; int contenuto[]; final int initialSize=3;
Pila() { size=initialSize; defaultGrowthSize=initialSize; marker=0; contenuto=new int[size]; }
![Page 31: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/31.jpg)
La Pila in Java - 1package strutture;public class Pila { int size; int defaultGrowthSize; int marker; int contenuto[]; final int initialSize=3;
Pila() { size=initialSize; defaultGrowthSize=initialSize; marker=0; contenuto=new int[size]; }
costante
![Page 32: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/32.jpg)
La Pila in Java - 2 private void cresci(int dim){ size+=defaultGrowthSize;
int temp[ ]=new int[size]; for (int k=0;k<marker;k++)
temp[k]=contenuto[k];
contenuto=temp;}
![Page 33: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/33.jpg)
La Pila in Java - 3void inserisci(int k) { if (marker==size){
cresci(defaultGrowthSize;)} contenuto[marker]=k; marker++; }
int estrai() { if (marker==0) { System.out.println(
"Non posso estrarre da una pila vuota"); System.exit(1); } return contenuto[--marker]; }
![Page 34: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/34.jpg)
La Pila in Java - 4
public static void main(String args[]) { int dim=10; Pila s=new Pila(); for (int k=0;k<2*dim;k++)
s.inserisci(k); for (int k=0;k<3*dim;k++) System.out.println(s.estrai()); }
}
![Page 35: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/35.jpg)
Using assertions (da Java 1.4)
int estrai() {
assert(marker>0):"Invalid marker";
return contenuto[--marker];
}
Compilare con:java –ea Pila.java
java.lang.AssertionError: Invalid markerat pila.Pila.estrai(Pila.java:22)at pila.Pila.main(Pila.java:39)
![Page 36: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/36.jpg)
Using System.arrayCopy()
System.arraycopy(
Object src, int src_position,
Object dst, int dst_position, int length
);
Copies the specified source array, beginning at the specified position, to the specified position of the
destination array.
![Page 37: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/37.jpg)
La Pila in Java - 2 private void cresci(int dim){ size+=defaultGrowthSize;
int temp[ ]=new int[size];System.arraycopy(
contenuto, 0, temp, 0, marker-1);
contenuto=temp;}
![Page 38: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/38.jpg)
Tipi di dato derivati (reference data)
Java, come tutti i linguaggi OO, permette di definire NUOVI TIPI DI DATO (classi).
Alcuni tipi di dato (classi) sono predefinite:ad esempio le stringhe. (String)
Point punto = new Point(10,10);
No Structures or UnionsJava does not support C struct or union types. Note, however, that
a class is essentially the same thing as a struct, but with more features. And you can simulate the important features of a union by subclassing.
tipo identificatore costruttoreOperatore
di creazione
![Page 39: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/39.jpg)
“Java non ha i puntatori”
Ma è vero?Point punto = new Point(10,10);
l’identificatore di un oggetto (“punto”)sembra proprio un puntatore!
Quel che Java non ha èl’aritmetica dei puntatori
.
![Page 40: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/40.jpg)
Confronto dell’operatore new
in C++: Point * punto = new Point(10,10);
in Java: Point punto = new Point(10,10);
punto.x di Java equivale a punto->x del C++
In Java gli oggetti sono accessibili SOLO per referenza
.
![Page 41: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/41.jpg)
memory management
La gestione (dinamica) della memoria e’ automatica, tramite la creazione (operatore new ) e la distruzione (garbage collection) di oggetti.
GC interviene quando serve memoria.
GC elimina gli oggetti per i quali non vi sono piu’ riferimenti attivi.
GC puo’ essere attivato su richiesta esplicita: System.gc()
![Page 42: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/42.jpg)
memory management - costruttori
Operazioni da eseguirsi alla nascita di un oggetto vanno definite nel metodo “costruttore”.
Ogni classe deve avere uno (o più) costruttori.
I costruttori possono differire per numero e tipo di parametri.Es.:Pila() {
size=100; …}
Pila(int size) {this.size=size
}
![Page 43: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/43.jpg)
memory management - distruttori
Operazioni da associarsi con l’eliminazione di un oggetto possono essere definite nel metodo “distruttore” finalize() (opzionale)
NOTA: il metodo finalize POTREBBE NON ESSERE CHIAMATO DAL SISTEMA (es. se il programma finisce prima…)
Per essere certi che vengano chiamati i metodi finalize, occorre chiamare la
System.runFinalization() subito DOPO la System.gc()
![Page 44: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/44.jpg)
System agisce come libreria
System.out.println(…);System.gc();System.runFinalization();System.exit(int status);System.arraycopy(Object src, int srcPos, Object dest, int
destPos, int length);long System. currentTimeMillis();
![Page 45: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/45.jpg)
Class String
![Page 46: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/46.jpg)
Class String
![Page 47: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/47.jpg)
Class String
![Page 48: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/48.jpg)
Class String
![Page 49: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/49.jpg)
Class String
![Page 50: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/50.jpg)
String
Per trasformare il contenuto di una stringa in un intero:
int Integer.parseInt(String s)
Per trasformare il contenuto di una stringa in un float:
float Float.parseFloat(String s)
![Page 51: Il nostro esempio guida: La costruzione di uno stack](https://reader035.vdocumenti.com/reader035/viewer/2022062802/5681461f550346895db32768/html5/thumbnails/51.jpg)
51
Esercizio:Costruite una Coda analoga alla
Pila