schiavone & scalas 2 in informatica, il termine stack o pila viene usato in diversi contesti per...
TRANSCRIPT
Schiavone & Scalas 2
In informatica, il termine stack o pila viene usato in diversi contesti per riferirsi a strutture dati le cui modalità d'accesso seguono una politica LIFO (Last In First Out) più in generale la pila è una struttura dati lineare a cui si può accedere soltanto mediante uno dei suoi capi per inserire(PUSH) e per estrarre(POP) dati.
Schiavone & Scalas 3
Menù
Pila• Sequenziale: sequenza di locazioni adiacenti in
un vettore; segue una politica LIFO per cui il primo elemento inserito è anche il primo ad essere estratto. Si inserisce sempre in testa. Quando inserisco un elemento eseguo Push e quando ne estraggo uno eseguo un’operazione di Pop.
Schiavone & Scalas 4
Menù
• Concatenata: successioni di nodi collegato tra loro tramite puntatori dove l’ultimo nodo non ha successori. Si accede tramite un puntatore di testa e le operazioni di inserimento ed estrazione avvengono solo in testa alla struttura dati.
Schiavone & Scalas 5
Menù
Sequenziale
Schiavone & Scalas 6
top
top 0 pila vuotatop max pila piena
Menù
Concatenata
Schiavone & Scalas 7
PILA
testa
info info info info
Menù
Schiavone & Scalas 8
Push 7Push 15Push 5Push 10 Pop Pop
10
5
10
15
10
7
15
10
15
1010
5
7
Menù
Schiavone & Scalas 9
Per inserire un elemento nella Pila è importante effettuare un’operazione di Push.Con questa operazione il dato inserito si troverà alla testa dello Stack e ad ogni operazione di Push il puntatore verrà incrementato
1. Controllare che la pila non sia Piena *IsFull*
2. Incrementa il puntatore3. Inserimento di un elemento (Push)
Menù
Schiavone & Scalas 10
Per estrarre un elemento nella Pila è importante effettuare un’operazione di Pop.Con questa operazione il dato da estrarre si dovrà trovare alla testa dello Stack e ad ogni operazione di Pop il puntatore verrà decrementato
1. Controllare che la pila non sia Vuota *IsEmpty*2. Estrarre l’elemento (Pop)3. Decrementare
Menù
Analisi
Schiavone & Scalas 11
Il programma comincia presentando un menù dove vi si possono effettuare 5 scelte che sono le seguenti:1.inserimento elementi2.stampa elementi3.somma elementi4.Pop5.ESCICon la prima scelta viene chiesto all’utente il numero di elementi che vuole inserire <<ne<<, dopo di che l’utente inserirà gli elementi uno alla volta.Effettuando la seconda scelta l’utente potrà visualizzare la stampa degli elementi pre-inseriti.Con la terza scelta verrà effettuata la somma algebrica degli elementi della Pila e dopo di che verrà visualizzata la somma degli elementi.Con la quarta scelta verrà estratto l’ultimo nodo inserito e richiamando la seconda funzione di stampa si potranno visualizzare gli elementi della Pila privi dell’elemento estratto.
Menù
Analisi dei dati
Schiavone & Scalas 12
VARIABILE DESCRIZIONE TIPO I/O/A
SC È la variabile che serve per effettuare la scelta nel menù
int I
NE È il numero di elementi int I
I È il contatore del for int I
P1 È la pila Pila I/O
N È il nodo Nodo I
INFO È il campo del nodo dove viene inserita l’informazione
Int I
Menù
Schiavone & Scalas 13
Flow ChartMenù
Schiavone & Scalas 14
Menù
Schiavone & Scalas 15
Menù
Codice
Schiavone & Scalas 16
Menù
#include<conio.h>#include<stdio.h>#include<iostream.h>
<<<<<struct<<<<<struct Nodo{ int Info; Nodo *Next;}; struct Pila{ Nodo *Testa;};<<<<<<prototipi<<<<<<<void Crea(Pila &); int Testvuota(Pila); Nodo *Pop(Pila &); void Push(Pila &,Nodo *); void Stampa(Pila &); int Somma(Pila &);
void main(){int sc,ne;clrscr(); Pila P1; Nodo *Temp; int Info; Crea(P1); do{ clrscr(); printf("MENU"); gotoxy(1,2); printf("1)inserimento elementi"); gotoxy(1,3); printf("2)stampa elementi"); gotoxy(1,4); printf("3)somma elementi"); gotoxy(1,5); printf("4)Pop"); gotoxy(1,6); printf("5)ESCI");
Schiavone & Scalas 17
Menùswitch(sc){ case 1: clrscr(); printf("quanti elementi vuoi inserire?"); scanf("%d",&ne); for(int i=1;i<=ne;i++) { Temp=new Nodo; printf("inserisci il %d ø elemento: ",i); scanf("%d",&Temp->Info); Temp->Next=NULL; Push(P1,Temp); } break;case 2: Stampa(P1); getch(); break; case 3: Stampa(P1); printf("Somma elementi= %d ",Somma(P1)); getch(); break;
case 4: Nodo *Ntemp=Pop(P1); delete Ntemp; gotoxy(1,5); break;
default: break;}}while(sc!=5);}<<<<<<Crea pila vuota<<<<<<< void Crea(Pila&P){ P.Testa=NULL;}<<<<<<verifica se la pila è vuota<<<<<<int TestVuota(Pila P){getch();return(P.Testa==0); }
Schiavone & Scalas 18
<<<<<estrai un nodo POP<<<<Nodo*Pop(Pila&P){ Nodo*N=NULL; if(!TestVuota(P)) { N=P.Testa; P.Testa=(P.Testa)->Next; N->Next=NULL; } else printf("pila underflow"); return(N);}<<<<<inserisce un elemento PUSH<<<void Push(Pila &P,Nodo *N){ N->Next=P.Testa; P.Testa=N; }<<<<Stampa<<<<<<<<<<<<<void Stampa(Pila &P) { Nodo *Temp=P.Testa; while(Temp!=NULL) { printf("%d\n",Temp->Info); Temp=Temp->Next; }}
Menù
<<<<<somma degli elementi<<<int Somma(Pila &P){ int somma=0; Nodo*Temp=P.Testa; while(Temp!=NULL){ somma=somma+Temp->Info; Temp=Temp->Next;} return(somma);}
Schiavone & Scalas 19
Menù