• Non ci sono risultati.

Algoritmi e Strutture Dati A-L. Informatica Esercitazioni 2

N/A
N/A
Protected

Academic year: 2021

Condividi "Algoritmi e Strutture Dati A-L. Informatica Esercitazioni 2"

Copied!
2
0
0

Testo completo

(1)

Algoritmi e Strutture Dati A-L. Informatica Esercitazioni 2

1 marzo 2007

1 Esempi d’uso dei puntatori

Un tipico esercizio del corso consiste nell’effettuare un’elaborazione su una struttura dati e riorganizzarla in modo da presentare il risultato dell’elaborazione.

Un primo esempio basato su liste:

Esercizio: data in input una serie di numeri interi, memorizzarli in una struttura dati di tipo lista e stamparli a video in ordine INVERSO rispetto all’inserimento.

Esercizi di questo tipo in linea di massima posso essere risolti in due modi differ- enti:

• lavorando direttamente su puntatori e creando le varie funzioni e procedure nec- essarie allo scopo;

• utilizzando gli operatori introdotti sul libro di testo, tipici di ogni struttura dati.

In sede d’esame tipicamente viene chiesto di risolvere questi problemi utilizzando gli operatori introdotti sul testo, nel corso delle esercitazioni invece alterneremo soluzioni complete (lavorando direttamente sui puntatori) ad altre nelle quali useremo gli opera- tori. Il motivo dovrebbe essere abbastanza ovvio.

Per una prima soluzione all’esercizio far riferimento al sorgente listare- verse.pas contenuto in codice2.tgz

Il sorgente è di facile interpretazione:

1. viene definita una nuova struttura dati “cella” di tipo record che contiene una variabile per il numero da memorizzare ed i puntatori all’elemento precedente e successivo nella lista

2. attraverso una normale costruzione a lista gli elementi presi in input vengono inseriti in coda alla lista distinguendo il caso in cui questa sia ancora vuota e quando invece è già presente almeno un elemento

3. una volta completato l’inserimento (quando l’utente termina l’operazione indi- cando un numero dispari) si procede alla “visita” partendo dalla coda della lista e retrocedendo fino alla testa

1

(2)

È evidente come possa essere facilmente realizzata una soluzione algoritmicamente molto più elegante: listareverse2.pas: in questo caso l’inserimento invece che avvenire in coda avviene direttamente in testa, così che la successiva procedura visita() abbia già la lista pronta da stampare a video: sono quindi inutili anche i puntatori che rendevano possibile la “navigazione al contrario”.

Nel file listalibro.pas si può invece trovare una soluzione che utilizzi gli operatori delle liste introdotti nel libro di testo nelle pagine 40 e 41.

2

Riferimenti

Documenti correlati

– Alan Bertossi, Alberto Montresor, Algoritmi e strutture di dati Terza Edizione, 2014, Città Studi,

Definire un algoritmo efficiente che, dato in input il grafo G = (V, E, w), la capacità P della batteria e l'array R[1..n], restituisca true se e solo se esiste un cammino

In aggiunta ai “tipi” predefiniti dal linguaggio il programmatore può definire dei nuovi tipi, come vedremo in seguito questo risulta molto comodo lavorando con i puntatori e

Utilizzando le pile, si scrivano tre procedure Pascal iterative di complessità ottima per effettuare, rispettivamente, le visite anticipata, differita e simmetrica di un albero

Si progettino un algoritmo euristico di tipo greedy ed uno di ricerca locale per risolvere il problema della BISEZIONE in forma di ottimizzazione: “Dato un grafo non orientato G =

Si scriva una procedura Pascal, basata sulla ricerca binaria, per individuare in tempo O(log n) l’unico intero dell’intervallo 1..n+1 che non compare in V.... Si scriva

L Insertion Sort è uno algoritmo di ordinamento molto efficiente per ordinare un piccolo numero di elementi. L idea di ordinamento è quella che potrebbe usare un persona

L’array A[p…r] viene “suddiviso” in due sotto- array “non vuoti” A[p… q] e A[q+1…r] in cui ogni elemento di A[p…q] è minore o uguale ad ogni elemento