algoritmi e strutture dati - università di romasavo/didattica/asd/slide/ese1.pdf · strutture dati...

30
Strutture dati elementari: Esercitazione Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 1 Algoritmi e Strutture Dati Domenico Fabio Savo

Upload: buinhi

Post on 06-Feb-2018

235 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Strutture dati elementari:

Esercitazione

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 1

Algoritmi e Strutture Dati

Domenico Fabio Savo

Page 2: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 2

Il tipo di dato Pila

Page 3: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 3

Pila: implementazione tramite array

La pila sarà rappresentata come una coppia

(S, t) dove:

• S è un array di dimensione N

• t è un intero che rappresenta l’indice

dell’elemento affiorante della pila.

0 1 2 3 t N-2 N-1

S …

Page 4: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 4

Pila: esercizio

Esercizio:

Scrivere lo pseudocodice che implementa le

operazioni definite sul tipo di dato PILA

(isEmpty, push, pop, top), nel caso in cui

questo è implementato tramite un array.

Page 5: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 5

Pila: isEmpty

• Il primo indice dell’array è zero, quindi

inizializziamo t a -1.

0 1 2 3 t N-2 N-1

S …

isEmpty() true or false

if (t < 0) then return true

else return false

Page 6: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 6

Pila: push

push(elem e)

if (t = N-1)

then lancia eccezione la pila è piena;

else { t t+1;

S[t] e; }

Nel caso in cui l’array è pieno, invece di lanciare l’eccezione si

potrebbe adottare una politica di ridimensionamento dell’array

utilizzato. Come si può fare?

Page 7: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 7

Pila: pop

pop() elem e

if (S.isEmpty())

then return null;

else { elem e S[t];

S[t] null;

t t-1;

return e; }

Page 8: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 8

Pila: top

top() elem e

if (S.isEmpty())

then return null;

else return S[t];

Page 9: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 9

Pila: esercizio

Esercizio 2:

Scrivere lo pseudocodice che implementa le

operazioni definite sul tipo di dato PILA

(isEmpty, push, pop, top), nel caso in cui

questo è implementato tramite una lista

semplice.

Page 10: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 10

Pila: implementazione mediante lista

semplice

La pila sarà rappresentata come una coppia (L, t) dove:

• L è una lista semplice in cui ogni record è una

coppia (elem, next), dove next è il puntatore al

successivo record della lista

• t è il puntatore all’elemento affiorante della pila

Page 11: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 11

Pila: implementazione mediante lista

semplice

elem3 elem2 elem1 ∅

t

• Il record t rappresenta sempre l'elemento affiorante della pila.

• L’ultimo record della pila punterà (valore next) al record nullo

(null).

(elem, next)

Page 12: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 12

Pila: inserimento record

elem3 elem2 elem1 ∅

t

• L’aggiunta di un nuovo record nella pila è realizzata attraverso

l’aggiunta di un nuovo record in testa alla lista.

elem4

elem4 elem3 elem2 ∅

t

elem1

Page 13: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 13

Pila: estrazione record

• L’estrazione di un record dalla pila è realizzata attraverso

l’eliminazione del primo elemento della lista (ovvero il record t).

elem4 elem3 elem2 ∅

t

elem1

elem3 elem2 elem1 ∅

t

elem4

Page 14: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 14

Pila: isEmpty

• Se la pila non contiene alcun elemento allora t

punterà all'elemento nullo.

isEmpty() true or false

if (t = null) then return true

else return false

Page 15: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 15

Pila: push

push(elem e)

sia r un nuovo record;

r.elem e;

r.nextt;

t r;

• Inseriamo un nuovo record all'inizio della lista.

Page 16: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 16

Pila: pop

pop() elem e

if (L.isEmpty()) then return null;

else { r t;

t r.next;

return r.elem; }

• Il record restituito sarà il primo record della lista.

Page 17: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 17

Pila: top

top() elem e

if (L.isEmpty())

then return null;

else return t.elem;

Page 18: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 18

Il tipo di dato Coda

Page 19: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 19

Coda: implementazione mediante lista

semplice

La coda sarà rappresentata come una tripla (L, h, t) dove:

• L è una lista semplice in cui ogni record è una

coppia (elem, next), dove next è il puntatore al

successivo record della lista

• h è il puntatore al primo record della lista

• t è il puntatore all’ultimo record della lista

Page 20: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 20

Coda: implementazione mediante

lista semplice

elem1 elem2 elem3 ∅

h t

• Il record h è il primo elemento della lista e rappresenta la testa

della coda. Il record t è l’ultimo elemento della lista e

rappresenta la fine della coda.

• L’ultimo record della lista (ovvero il record t) punterà (valore

next) all record nullo (null).

(elem, next)

Page 21: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 21

Coda: inserimento record

elem1 elem2 elem3 ∅

h t

• L’aggiunta di un nuovo record nella coda è realizzata

attraverso l’aggiunta di un nuovo record alla fine della

lista.

elem4

elem1 elem2 elem3 ∅

h t

elem4

Page 22: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 22

Coda: estrazione record

• L’estrazione di un record dalla coda è realizzata attraverso

l’eliminazione del primo elemento della lista (ovvero il record h).

• DOMANDA: e se volessimo eliminare non il primo elemento

della lista, ma l’ultimo?

elem1 elem2 elem3 ∅

h t

elem4

elem2 elem3 elem4 ∅

h t

elem1

Page 23: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 23

Coda: esercizio

Esercizio:

Scrivere lo pseudocodice che implementa le

operazioni definite sul tipo di dato CODA

(isEmpty, enqueue, dequeue, first), nel caso

in cui questo è implementato tramite una

lista semplice.

Page 24: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 24

Coda: isEmpty

• Se la coda non contiene alcun elemento allora

h sarà uguale a t ed entrambi saranno nulli.

isEmpty() true or false

if (t = null) then return true

else return false

Page 25: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 25

Coda: enqueue

enqueue(elem e)

r.elem e;

if(L.isEmpty()) then {

h r; t r; r.nextnull; }

else { t.nextr;

r.nextnull;

t r; }

• Inseriamo un nuovo record alla fine della lista.

Page 26: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 26

Coda: dequeue

dequeue() elem e

if (L.isEmpty()) then return null;

else { r h;

h r.next;

return r.elem; }

• Il record restituito sarà il primo record della lista.

Page 27: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 27

Coda: first

first() elem e

if (L.isEmpty())

then return null;

else return h.elem;

Page 28: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 28

Bilanciamento delle parentesi

Diciamo che le parentesi in una stringa di

caratteri sono bilanciate se per ogni

parentesi aperta presente nella stringa è

presente anche la sua parentesi chiusa.

• xy{zkzk{yxy}htht{f}kzkz}yx parentesi bilanciate

• xy{vv{kkk}vvv}yyy}xyxy{xx parentesi non bilanciate

Page 29: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 29

Bilanciamento delle parentesi

Esercizio: scrivere un algoritmo il quale,

data una stringa S, verifichi che le parentesi

contenute in S siano bilanciate.

Suggerimento: utilizzare una PILA.

Page 30: Algoritmi e Strutture Dati - Università di Romasavo/didattica/asd/slide/ese1.pdf · Strutture dati elementari: Esercitazione 1 Algoritmi e Strutture Dati - Domenico Fabio Savo da

Algoritmi e Strutture Dati - Domenico Fabio Savo da Demetrescu et al. The McGraw - Hill, 2008 30

Bilanciamento delle parentesi

c «primo carattere di S»;

while (not «fine di S») {

if (c = ‘{’) then p.push(‘1’);

if (c = ‘}’)

if (p.isEmpty()) then

return false;

else p.pop();

c «prossimo carattere di S»;

}

if ( not p.isEmpy()) then return false;

return true;

Soluzione

S = y{ztzt{xyxy{tt}yxyx}ztzt}

{

{

{

{

{

{

x{

{

{

x {

{

{

xx x

x