Gestione dinamica di una pila

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Gestione dinamica di una pila"

Transcript

1 Gestione dinamica di una pila Una pila o stack è una lista lineare a lunghezza variabile in cui inserimenti (push) ed estrazioni (pop) vengono effettuate ad un solo estremo, detto testa (top) della pila. Questa struttura realizza il principio LIO (Last In irst Out) poiché l'ultimo elemento ad essere stato inserito è anche il primo ad essere estratto, come avviene in una pila di piatti. Le pile sono usate in moltissime applicazioni, ad esempio dai browser per memorizzare l elenco dei siti visitati in modo da consentire il ritorno indietro, nella gestione di un sistema di elaborazione per l esecuzione dei sottoprogrammi, negli editor di testo per memorizzare le operazioni eseguite in modo da permettere di effettuare l operazione di undo. Ogni elemento della pila (nodo) è costituito da due campi : un campo (inf) contenente l informazione (dato) e un campo (psucc) contenente il puntatore (indirizzo) dell elemento successivo. Ogni nodo è accessibile mediante il suo puntatore (p) : I due campi sono, convenzionalmente, indicati e distinti da : p -> inf per il campo informazione e da p -> psucc per il campo contenente il puntatore all elemento successivo. Una pila, come lista lineare, può essere, quindi, graficamente rappresentata nel seguente modo : dove : è l ultimo nodo della lista (il primo inserito) è un qualsiasi nodo intermedio è il primo nodo della lista (l ultimo inserito) Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 1

2 e dove : inf1,inf2,inf3,.infn rappresentano il campo informazione del nodo; p1, p2,p3, rappresentano il puntatore al nodo successivo; null è un valore simbolico del puntatore che individua la fine della lista; TDL è un puntatore esterno che individua il primo elemento della lista. Operazioni con la pila Operazione di Inserimento (Push) Data la lista : per effettuare un inserimento si devono effettuare i seguenti passi : 1) creare un nuovo nodo : dove : pnuovo è il nuovo puntatore assegnato al nodo. 2) assegnare opportunamente i valori ai puntatori in modo che il campo puntatore del nuovo nodo prenda il valore di TDL (inizio della lista) e TDL prenda il valore (pnuovo) del puntatore del nodo da inserire. Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 2

3 Usando la precedente convenzione, i due passi possono essere realizzati mediante le seguenti istruzioni : pnuovo -> psucc = TDL TDL = pnuovo Operazione di Estrazione (Pop) Data la lista : per effettuare una estrazione si deve semplicemente eliminare il primo nodo della lista. Per fare ciò, è sufficiente che il puntatore di inizio lista (TDL) assuma il valore presente nella parte puntatore del primo nodo (il puntatore al secondo nodo della lista deve diventare il puntatore iniziale) : TDL = TDL -> psucc TDL -> psucc è uguale a p1 e, quindi, p1 diventa TDL (il puntatore di inizio lista). Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 3

4 Programma in C++ per la gestione dinamica di una pila Il programma per la gestione dinamica di una pila deve prevedere, almeno, le seguenti funzioni : creazione di un nodo; controllo lista vuota; inserimento in testa di un nodo; estrazione in testa di un nodo; visualizzazione lista completa; ricerca di un nodo; eliminazione della lista. da realizzare, per es., mediante il seguente menù : Analisi dei dati Identificatore Descrizione Tipo Input Output Lavoro nodo struttura dati contenente : struttura inf tipo intero psucc puntatore a nodo numero tdl pnuovo p dato da inserire nel nodo della lista puntatore al primo elemento della lista puntatore del nuovo nodo creato puntatore di comodo per scorrere la lista intero puntatore puntatore puntatore si dati contenuti nei nodi della lista si si si Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 4

5 Definizione ed inizializzazione delle variabili struct nodo int inf; struct nodo *psucc; // parte informazione del nodo (un solo dato) // dato di tipo puntatore alla struttura stessa // contiene l'indirizzo (puntatore) all'elemento // successivo della struttura // nodo *psucc; // dichiarazione semplificata alternativa ; nodo *tdl = NULL; nodo *pnuovo = NULL; nodo *p = NULL; // puntatore al primo elemento della lista // puntatore del nuovo nodo creato // puntatore di comodo per scorrere la lista Creazione di un nodo unzione CreaNodo numero I alloca (pnuovo) pnuovo->inf= numero pnuovo->psucc=null Return void CreaNodo(void) int numero; cout<<"\ndigita il valore da inserire nel nodo...: "; cin>>numero; pnuovo = new nodo; // dall'area heap viene prelevato un indirizzo // ed associato al nodo creato pnuovo->inf=numero; // il numero inserito è posto nella parte // informazione del nodo pnuovo->psucc=null; // nella parte puntatore del nodo viene // inserita la costante NULL return; Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 5

6 Controllo lista vuota unzione Listauota vuota = T tdl = NULL Lista vuota O vuota = Return vuota bool Listauota() bool vuota = true; if (tdl == NULL) // se il punt. di inizio lista è nullo la lista è vuota cout <<" ATTENZIONE!! Lista vuota. "<<endl; vuota = false; return vuota; Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 6

7 Inserimento di un nodo (push) in testa unzione InserimentoT CreaNodo() tdl NULL pnuovo->psucc=tdl tdl = pnuovo Return void InserimentoT(void) CreaNodo(); if (tdl!= NULL) pnuovo->psucc=tdl; tdl = pnuovo; // se la lista non è vuota // il punt. di inizio lista viene inserito nella // parte punt. del nuovo nodo // il punt. del nuovo nodo diventa, comunque, il // punt. di inizio lista return; Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 7

8 Estrazione di un nodo (pop) in testa unzione EstrazioneT Listauota()= T p = tdl tdl = p->psucc p->psucc = NULL tdl = NULL dealloca (p) Return void EstrazioneT(void) if (Listauota() == true) p = tdl; // p puntatore di comodo // se la lista è costituita da un solo nodo si elimina l'intera lista if (p->psucc == NULL) tdl = NULL; else tdl = p->psucc; delete p; return; Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 8

9 isualizzazione lista completa unzione isualizzazione Listauota()= T p = tdl p NULL p -> inf O p = p->psucc Return void isualizzazione(void) if (Listauota() == true) p = tdl; // p (puntatore di comodo) parte da tdl per scorrere tutta la lista while (p!= NULL) cout <<p->inf<<endl; p = p->psucc; return; Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 9

10 Ricerca di un nodo unzione Ricerca Listauota()= T cerca I flag= p = tdl p NULL and flag= p->inf=cerca p = p->psucc flag= T flag = T non trovato O trovato O Return Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 10

11 void Ricerca(void) int cerca; bool flag=false; if (Listauota() == true) cout<<"\n Digita il nodo da ricercare...: "; cin>>cerca; p = tdl; while (p!= NULL && flag == false) if (p->inf == cerca) flag=true; else p = p->psucc; // per scorrere la lista if (flag == true) cout << "\n Nodo trovato!!\n"; else cout << "\n Nodo non trovato\n"; return; Eliminazione della lista if (Listauota() == true) tdl = NULL; // per eliminare la lista è sufficiente // che il puntatore iniziale diventi NULL cout<<"\n Lista eliminata!!\n"; Nota : il programma completo si può consultare (e scaricare) nella sezione : Informatica quarto anno/programmi in C++/Gestione dinamica delle strutture di dati (lista, coda, pila)/gestione di una pila oppure direttamente da : Gestione dinamica di una pila a cura del Prof. Salvatore DE GIORGI pag. 11

Ricerca sequenziale di un elemento in un vettore

Ricerca sequenziale di un elemento in un vettore Ricerca sequenziale di un elemento in un vettore La ricerca sequenziale o lineare è utilizzata per ricercare i dati in un vettore NON ordinato. L algoritmo di ricerca sequenziale utilizza quan non ha alcuna

Dettagli

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori Gli array Array e puntatori Laboratorio di Informatica I un array è un insieme di elementi (valori) avente le seguenti caratteristiche: - un array è ordinato: agli elementi dell array è assegnato un ordine

Dettagli

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione.

Quando A e B coincidono una coppia ordinata é determinata anche dalla loro posizione. Grafi ed Alberi Pag. /26 Grafi ed Alberi In questo capitolo richiameremo i principali concetti di due ADT che ricorreranno puntualmente nel corso della nostra trattazione: i grafi e gli alberi. Naturale

Dettagli

Gestione dei File in C

Gestione dei File in C Gestione dei File in C Maurizio Palesi DIIT Università di Catania Viale Andrea Doria 6, 95125 Catania mpalesi@diit.unict.it http://www.diit.unict.it/users/mpalesi Sommario In questo documento saranno introdotte

Dettagli

C / Dev-C++ procedurale Prof. Claudio Maccherani 2008/09

C / Dev-C++ procedurale Prof. Claudio Maccherani 2008/09 C / Dev-C++ procedurale Prof. Claudio Maccherani 2008/09 Nel 1972, presso i laboratori della AT&T, Tennis Ritchie realizza il linguaggio C per sviluppare il sistema operativo UNIX, svincolandosi così dall

Dettagli

Corso di Perl. Contatti. Indice. Michele Beltrame. Web. http://www.perl.it. Mail. info@perl.it. Newsgroup. news://it.comp.lang.

Corso di Perl. Contatti. Indice. Michele Beltrame. Web. http://www.perl.it. Mail. info@perl.it. Newsgroup. news://it.comp.lang. Michele Beltrame Corso di Perl Questo corso a puntate è stato pubblicato sui numeri 75,76,77,78,79,80,81,82,83,84 (2000-2001) della rivista Dev ed è in questo sito (http://www.perl.it) per autorizzazione

Dettagli

APPLICAZIONI SU PIU FILE

APPLICAZIONI SU PIU FILE APPLICAZIONI SU PIU FILE Serve poter sviluppare applicazioni su piú file: - alcune funzioni e alcune definizioni di dati in un file - altre funzioni e dati in file diversi Perché?? 1. Se il programma è

Dettagli

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili Indirizzo di una funzione 2 Puntatori a funzioni Ver. 2.4 Si può chiamare una funzione utilizzando l indirizzo di memoria dal quale inizia il codice eseguibile della funzione stessa L indirizzo di memoria

Dettagli

Data warehouse.stat Guida utente

Data warehouse.stat Guida utente Data warehouse.stat Guida utente Versione 3.0 Giugno 2013 1 Sommario INTRODUZIONE 3 I concetti principali 4 Organizzazione dei dati 4 Ricerca 5 Il browser 5 GUIDA UTENTE 6 Per iniziare 6 Selezione della

Dettagli

Università degli Studi Roma Tre. Prenotazione on-line

Università degli Studi Roma Tre. Prenotazione on-line Università degli Studi Roma Tre Prenotazione on-line Istruzioni per effettuare la prenotazione on-line degli appelli presenti sul Portale dello Studente Assistenza... 2 Accedi al Portale dello Studente...

Dettagli

I.Stat Guida utente Versione 1.7 Dicembre 2010

I.Stat Guida utente Versione 1.7 Dicembre 2010 I.Stat Guida utente Versione 1.7 Dicembre 2010 1 Sommario INTRODUZIONE 3 I concetti principali di I.Stat 4 Organizzazione dei dati 4 Ricerca 5 GUIDA UTENTE 6 Per iniziare 6 Selezione della lingua 7 Individuazione

Dettagli

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura Struttura a record 2 File ad accesso diretto Il file è organizzato in record aventi tutti la stessa struttura e quindi dimensione record 0 record 1 record 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione

Dettagli

Visibilità dei Membri di una Classe

Visibilità dei Membri di una Classe Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce

Dettagli

Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante

Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante Introduzione Il problema del massimo flusso. Preflow-push e augmenting path: un approccio unificante Il problema del massimo flusso è uno dei fondamentali problemi nell ottimizzazione su rete. Esso è presente

Dettagli

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1 DIAGRAMMI A BLOCCHI TEORIA ED ESERCIZI 1 1 Il linguaggio dei diagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi Il diagramma a blocchi, o flowchart, è una rappresentazione grafica

Dettagli

Denuncia di Malattia Professionale telematica

Denuncia di Malattia Professionale telematica Denuncia di Malattia Professionale telematica Manuale utente Versione 1.5 COME ACCEDERE ALLA DENUNCIA DI MALATTIA PROFESSIONALE ONLINE... 3 SITO INAIL... 3 LOGIN... 4 UTILIZZA LE TUE APPLICAZIONI... 5

Dettagli

Figura 1 - Schermata principale di Login

Figura 1 - Schermata principale di Login MONITOR ON LINE Infracom Italia ha realizzato uno strumento a disposizione dei Clienti che permette a questi di avere sotto controllo in maniera semplice e veloce tutti i dati relativi alla spesa del traffico

Dettagli

TeamViewer 7 Manuale Controllo remoto

TeamViewer 7 Manuale Controllo remoto TeamViewer 7 Manuale Controllo remoto TeamViewer GmbH Kuhnbergstraße 16 D-73037 Göppingen teamviewer.com Indice 1 Informazioni su TeamViewer... 5 1.1 Informazioni sul software... 5 1.2 Informazioni sul

Dettagli

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dal Problema all'algoritmo

Dispense di Informatica Anno Scolastico 2008/2009 Classe 3APS. Dal Problema all'algoritmo stituto Tecnico Statale Commerciale Dante Alighieri Cerignola (FG) Dispense di nformatica Anno Scolastico 2008/2009 Classe 3APS Dal Problema all'algoritmo Pr.: 001 Ver.:1.0 Autore: prof. Michele Salvemini

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Cos è una stringa (1) Stringhe DD Cap. 8 pp. 305-341 KP Cap. 6 pp. 241-247 Una stringa è una serie di caratteri trattati come una singola unità. Essa potrà includere lettere, cifre, simboli e caratteri

Dettagli

Corso di Programmazione Linguaggio Pascal

Corso di Programmazione Linguaggio Pascal Materiale didattico preparato dal dott. Stefano Ferilli Corso di Programmazione Linguaggio Pascal Dott. Pasquale Lops lops@di.uniba.it Corso di Programmazione - DIB 1/144 Pascal Standard ISO 7185 Standard

Dettagli

Lab. 1 - Introduzione a Matlab

Lab. 1 - Introduzione a Matlab Lab. 1 - Introduzione a Matlab Alcune informazioni su Matlab Matlab è uno strumento per il calcolo scientifico utilizzabile a più livelli, dalla calcolatrice tascabile, alla simulazione ed analisi di sistemi

Dettagli

DAL PROBLEMA AL CODICE: ATTRAVERSO LO PSEUDOCODICE

DAL PROBLEMA AL CODICE: ATTRAVERSO LO PSEUDOCODICE DAL PROBLEMA AL CODICE: ATTRAVERSO LO PSEUDOCODICE Il problema Un computer è usato per risolvere dei problemi Prenotazione di un viaggio Compilazione e stampa di un certificato in un ufficio comunale Preparazione

Dettagli

Gli algoritmi. Gli algoritmi. Analisi e programmazione

Gli algoritmi. Gli algoritmi. Analisi e programmazione Gli algoritmi Analisi e programmazione Gli algoritmi Proprietà ed esempi Costanti e variabili, assegnazione, istruzioni, proposizioni e predicati Vettori e matrici I diagrammi a blocchi Analisi strutturata

Dettagli

GUIDA al SERVIZIO SIMOG

GUIDA al SERVIZIO SIMOG GUIDA al SERVIZIO SIMOG Manuale utente profilo RUP Ver. 3.03.3.0 Questa Guida ha l obiettivo di rendere il più agevole possibile la fruizione del SIMOG nel completamento delle funzionalità esposte. L AVCP

Dettagli

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1

CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 1.1 Che cos è un algoritmo CAPITOLO PRIMO IL CONCETTO DI ALGORITMO 1 Gli algoritmi sono metodi per la soluzione di problemi. Possiamo caratterizzare un problema mediante i dati di cui si dispone all inizio

Dettagli

Corso SOL Gestione catalogo libro moderno 21-22 settembre 2009

Corso SOL Gestione catalogo libro moderno 21-22 settembre 2009 Corso SOL Gestione catalogo libro moderno 21-22 settembre 2009 Introduzione generale Autenticazione dell operatore https://sebina1.unife.it/sebinatest Al primo accesso ai servizi di Back Office, utilizzando

Dettagli

SIMATIC S7. Primi passi ed esercitazioni con STEP 7. Benvenuti in STEP 7, Contenuto. Introduzione a STEP 7 1

SIMATIC S7. Primi passi ed esercitazioni con STEP 7. Benvenuti in STEP 7, Contenuto. Introduzione a STEP 7 1 s SIMATIC S7 Primi passi ed esercitazioni con STEP 7 Getting Started Benvenuti in STEP 7, Contenuto Introduzione a STEP 7 1 SIMATIC Manager 2 Programmazione con nomi simbolici 3 Creazione di un programma

Dettagli