schiavone & scalas 2 in informatica, il termine stack o pila viene usato in diversi contesti per...

19

Upload: orsino-bondi

Post on 02-May-2015

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 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
Page 2: 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

Schiavone & Scalas 2

Page 3: 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

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ù

Page 4: 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

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ù

Page 5: 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

• 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ù

Page 6: 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

Sequenziale

Schiavone & Scalas 6

top

top 0 pila vuotatop max pila piena

Menù

Page 7: 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

Concatenata

Schiavone & Scalas 7

PILA

testa

info info info info

Menù

Page 8: 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

Schiavone & Scalas 8

Push 7Push 15Push 5Push 10 Pop Pop

10

5

10

15

10

7

15

10

15

1010

5

7

Menù

Page 9: 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

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ù

Page 10: 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

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ù

Page 11: 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

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ù

Page 12: 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

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ù

Page 13: 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

Schiavone & Scalas 13

Flow ChartMenù

Page 14: 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

Schiavone & Scalas 14

Menù

Page 15: 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

Schiavone & Scalas 15

Menù

Page 16: 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

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");

Page 17: 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

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); }

Page 18: 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

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);}

Page 19: 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

Schiavone & Scalas 19

Menù