SlideShare ist ein Scribd-Unternehmen logo
1 von 26
ADT Stack Implementazione tramite variabili dinamiche
Perché? ,[object Object]
Con l'implementazione a lista, utilizzeremo  solo  la memoria che ci serve (o quasi)
La struttura ,[object Object]
Dovremo sempre avere modo di recuperare il primo elemento dello stack: chiameremo s la variabile (di tipo puntatore) che punta all'elemento attualmente in cima allo stack;
La struttura typedef struct Stack  { int info; Stack *next; } //useremo due variabili, s & t Stack *s, *t;
Inizializzazione L'inizializzazione risulta piuttosto semplice: basta assegnare alla variabile s il valore NULL. Null è una costante predefinita del C/C++ che segnala un puntatore che non punta a... nulla, appunto. Come tale è molto utilizzata nei controlli.  All'inizio il nostro stack è vuoto, quindi: s = null;
Inserimento di un elemento (PUSH) Per inserire un valore nello stack, dapprima creiamo un nuovo elemento in una variabile di appoggio, poi questo nuovo elemento diverrà il nuovo elemento “più in alto dello stack”. Dopo aver inserito l'informazione, lo agganceremo allo stack;
Il codice //creo nuovo elemento t= (stack *)malloc(sizeof(stack)); //inserisco valore (in questo caso 63) t->dato=83; //aggancio il nuovo elemento t->succ=s; //aggiorno s, che punta al nuovo “primo” elemento s=t;
Graficamente... ,[object Object],MEMORIA HEAP s t
Graficamente... ,[object Object],MEMORIA HEAP s t
Graficamente... MEMORIA HEAP ,[object Object],s t 83
Graficamente... MEMORIA HEAP ,[object Object],s t 83
Graficamente... MEMORIA HEAP ,[object Object],s t 83
Graficamente... MEMORIA HEAP ,[object Object],s t 83
Graficamente...(x2) MEMORIA HEAP ,[object Object],s t 83
Graficamente...(x2) MEMORIA HEAP ,[object Object],s t 83 12
Graficamente...(x2) MEMORIA HEAP ,[object Object],s t 83 12
Graficamente...(x2) MEMORIA HEAP ,[object Object],s t 83 12
Eliminazione di un elemento (POP) ,[object Object]
Per prima cosa preleviamo il dato (dopo aver controllato se lo stack non è vuoto) e lo assegnamo a una variabile (la useremo nel main)
Salviamo il vecchio valore di s in t
Poi cambiamo s in modo che punti all'elemento successivo
Infine, liberiamo lo spazio allocato in memoria
Il codice //recupero dato out=s->dato //salvo il puntatore al dato da eliminare t=s; //lo stack passa all'elemento successivo s=s->succ; //libero la memoria  free(t);
Graficamente...(x2) MEMORIA HEAP ,[object Object],s t 83 12 out 12

Weitere ähnliche Inhalte

Was ist angesagt?

Data mining 06-dataframe
Data mining 06-dataframeData mining 06-dataframe
Data mining 06-dataframeStudiabo
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterativeguest60e9511
 
Puntatori in C++
Puntatori in C++Puntatori in C++
Puntatori in C++marckmart
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeSergio Porcu
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2Majong DevJfu
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)STELITANO
 

Was ist angesagt? (8)

Data mining 06-dataframe
Data mining 06-dataframeData mining 06-dataframe
Data mining 06-dataframe
 
5 Strutture Iterative
5   Strutture Iterative5   Strutture Iterative
5 Strutture Iterative
 
Puntatori in C++
Puntatori in C++Puntatori in C++
Puntatori in C++
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 
Algoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, codeAlgoritmi e Programmazione Avanzata - Liste, pile, code
Algoritmi e Programmazione Avanzata - Liste, pile, code
 
Visual Basic, Equazioni Sec Grado
Visual Basic, Equazioni Sec GradoVisual Basic, Equazioni Sec Grado
Visual Basic, Equazioni Sec Grado
 
11 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 211 - Programmazione: Tipi di dato strutturati pt. 2
11 - Programmazione: Tipi di dato strutturati pt. 2
 
Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)Lezione 12 (28 marzo 2012)
Lezione 12 (28 marzo 2012)
 

Andere mochten auch

Joshua and the conquest
Joshua and the conquestJoshua and the conquest
Joshua and the conquestCraig Baugh
 
Balanceo de ecuaciones
Balanceo de ecuacionesBalanceo de ecuaciones
Balanceo de ecuacioneskarla_Hdz
 
Cellular respiration introduction general for 9th grade biology
Cellular respiration introduction general for 9th grade biologyCellular respiration introduction general for 9th grade biology
Cellular respiration introduction general for 9th grade biologyStephanie Beck
 
Manual de serviço ch125 spacy (1993) mskv8931 p chassi
Manual de serviço ch125 spacy (1993)   mskv8931 p chassiManual de serviço ch125 spacy (1993)   mskv8931 p chassi
Manual de serviço ch125 spacy (1993) mskv8931 p chassiThiago Huari
 
OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)
OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)
OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)Niki Acosta
 
Личная гигиена
Личная гигиенаЛичная гигиена
Личная гигиенаElena Lubaikina
 
Pemrograman berbasis web (Luszara Lucky Viona)
Pemrograman berbasis web (Luszara Lucky Viona)Pemrograman berbasis web (Luszara Lucky Viona)
Pemrograman berbasis web (Luszara Lucky Viona)Luszara Part II
 
Introduction to Visual Management
Introduction to Visual ManagementIntroduction to Visual Management
Introduction to Visual ManagementEgor Sviridenko
 

Andere mochten auch (12)

Joshua and the conquest
Joshua and the conquestJoshua and the conquest
Joshua and the conquest
 
Balanceo de ecuaciones
Balanceo de ecuacionesBalanceo de ecuaciones
Balanceo de ecuaciones
 
Cellular respiration introduction general for 9th grade biology
Cellular respiration introduction general for 9th grade biologyCellular respiration introduction general for 9th grade biology
Cellular respiration introduction general for 9th grade biology
 
Manual de serviço ch125 spacy (1993) mskv8931 p chassi
Manual de serviço ch125 spacy (1993)   mskv8931 p chassiManual de serviço ch125 spacy (1993)   mskv8931 p chassi
Manual de serviço ch125 spacy (1993) mskv8931 p chassi
 
Biotecnología
BiotecnologíaBiotecnología
Biotecnología
 
Ckv Kerk
Ckv KerkCkv Kerk
Ckv Kerk
 
Firewall
FirewallFirewall
Firewall
 
OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)
OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)
OpenStack101: Introductions to Private and Hybrid Clouds (BrightTALK)
 
Личная гигиена
Личная гигиенаЛичная гигиена
Личная гигиена
 
World News - CNNMoney
World News - CNNMoneyWorld News - CNNMoney
World News - CNNMoney
 
Pemrograman berbasis web (Luszara Lucky Viona)
Pemrograman berbasis web (Luszara Lucky Viona)Pemrograman berbasis web (Luszara Lucky Viona)
Pemrograman berbasis web (Luszara Lucky Viona)
 
Introduction to Visual Management
Introduction to Visual ManagementIntroduction to Visual Management
Introduction to Visual Management
 

Ähnlich wie ADT Stack

Lo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in JavaLo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in JavaMarcello Missiroli
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettoriSTELITANO
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)STELITANO
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedefPiero Fraternali
 

Ähnlich wie ADT Stack (12)

Lo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in JavaLo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in Java
 
Insertion sort
Insertion sortInsertion sort
Insertion sort
 
Java lezione 7
Java lezione 7Java lezione 7
Java lezione 7
 
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiAlgoritmi e Programmazione Avanzata - Esercizi propedeutici
Algoritmi e Programmazione Avanzata - Esercizi propedeutici
 
Pillole di C++
Pillole di C++Pillole di C++
Pillole di C++
 
Dispensa di PL-SQL
Dispensa di PL-SQLDispensa di PL-SQL
Dispensa di PL-SQL
 
Selection sort
Selection sortSelection sort
Selection sort
 
Lezione 12 (28 marzo 2012) puntatori vettori
Lezione 12 (28 marzo 2012) puntatori   vettoriLezione 12 (28 marzo 2012) puntatori   vettori
Lezione 12 (28 marzo 2012) puntatori vettori
 
Array
ArrayArray
Array
 
Riepilogo Java C/C++
Riepilogo Java C/C++Riepilogo Java C/C++
Riepilogo Java C/C++
 
Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)Lezione 16 (2 aprile 2012)
Lezione 16 (2 aprile 2012)
 
06 1 array_stringhe_typedef
06 1 array_stringhe_typedef06 1 array_stringhe_typedef
06 1 array_stringhe_typedef
 

Mehr von Marcello Missiroli (20)

Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
Guida del perfetto Algoritmista I
Guida del perfetto Algoritmista IGuida del perfetto Algoritmista I
Guida del perfetto Algoritmista I
 
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
 
Dal c a Java (3/3)
Dal c a Java (3/3)Dal c a Java (3/3)
Dal c a Java (3/3)
 
Dal C a Java (2/3)
Dal C a Java (2/3)Dal C a Java (2/3)
Dal C a Java (2/3)
 
Dal C a Java (1/3)
Dal C a Java (1/3)Dal C a Java (1/3)
Dal C a Java (1/3)
 
Variabili
VariabiliVariabili
Variabili
 
Sviluppo degli algoritmi
Sviluppo degli algoritmiSviluppo degli algoritmi
Sviluppo degli algoritmi
 
5 stadi dello sviluppo di un gruppo
5 stadi dello sviluppo di un gruppo5 stadi dello sviluppo di un gruppo
5 stadi dello sviluppo di un gruppo
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Big O Notation
Big O NotationBig O Notation
Big O Notation
 
Insegnare Agile
Insegnare AgileInsegnare Agile
Insegnare Agile
 
The Sequel to sql
The Sequel to sqlThe Sequel to sql
The Sequel to sql
 
L'avvento del programmatore sociale
L'avvento del programmatore socialeL'avvento del programmatore sociale
L'avvento del programmatore sociale
 
Il ciclo for
Il ciclo forIl ciclo for
Il ciclo for
 
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
 
Controllo di versione e Git
Controllo di versione e GitControllo di versione e Git
Controllo di versione e Git
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
 
Moodle: i compiti (homework)
Moodle: i compiti (homework)Moodle: i compiti (homework)
Moodle: i compiti (homework)
 
Uefi: l'eterna lotta tra il bene e il male
Uefi: l'eterna lotta tra il bene e il maleUefi: l'eterna lotta tra il bene e il male
Uefi: l'eterna lotta tra il bene e il male
 

Kürzlich hochgeladen

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIinfogdgmi
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 

Kürzlich hochgeladen (9)

Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
ScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AIScrapeGraphAI: a new way to scrape context with AI
ScrapeGraphAI: a new way to scrape context with AI
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 

ADT Stack

  • 1. ADT Stack Implementazione tramite variabili dinamiche
  • 2.
  • 3. Con l'implementazione a lista, utilizzeremo solo la memoria che ci serve (o quasi)
  • 4.
  • 5. Dovremo sempre avere modo di recuperare il primo elemento dello stack: chiameremo s la variabile (di tipo puntatore) che punta all'elemento attualmente in cima allo stack;
  • 6. La struttura typedef struct Stack { int info; Stack *next; } //useremo due variabili, s & t Stack *s, *t;
  • 7. Inizializzazione L'inizializzazione risulta piuttosto semplice: basta assegnare alla variabile s il valore NULL. Null è una costante predefinita del C/C++ che segnala un puntatore che non punta a... nulla, appunto. Come tale è molto utilizzata nei controlli. All'inizio il nostro stack è vuoto, quindi: s = null;
  • 8. Inserimento di un elemento (PUSH) Per inserire un valore nello stack, dapprima creiamo un nuovo elemento in una variabile di appoggio, poi questo nuovo elemento diverrà il nuovo elemento “più in alto dello stack”. Dopo aver inserito l'informazione, lo agganceremo allo stack;
  • 9. Il codice //creo nuovo elemento t= (stack *)malloc(sizeof(stack)); //inserisco valore (in questo caso 63) t->dato=83; //aggancio il nuovo elemento t->succ=s; //aggiorno s, che punta al nuovo “primo” elemento s=t;
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21. Per prima cosa preleviamo il dato (dopo aver controllato se lo stack non è vuoto) e lo assegnamo a una variabile (la useremo nel main)
  • 22. Salviamo il vecchio valore di s in t
  • 23. Poi cambiamo s in modo che punti all'elemento successivo
  • 24. Infine, liberiamo lo spazio allocato in memoria
  • 25. Il codice //recupero dato out=s->dato //salvo il puntatore al dato da eliminare t=s; //lo stack passa all'elemento successivo s=s->succ; //libero la memoria free(t);
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32. Non permette di “osservare” il dato nello stack senza toglierlo
  • 33. Non è compatibile con l'interfaccia che abbiamo definito in precedenza
  • 34. QUESTI SONO I PROBLEMI DA RISOLVERE! BUON LAVORO