• Non ci sono risultati.

Spazio riservato alla correzione1 2 3 4 5Totale /8 /8 /6/8/2 /32

N/A
N/A
Protected

Academic year: 2021

Condividi "Spazio riservato alla correzione1 2 3 4 5Totale /8 /8 /6/8/2 /32"

Copied!
1
0
0

Testo completo

(1)

Laboratorio di Algoritmi e Strutture Dati - Moduli A e B Docente: A. Murano 18 Giugno 2005

Laurea in Informatica Università degli Studi di Napoli “Federico II”

Nome e Cognome Numero di Matricola:

Spazio riservato alla correzione

1 2 3 4 5 Totale

/8 /8 /6 /8 /2 /32

Non utilizzate altri fogli. Utilizzate soltanto lo spazio sottostante. Fogli differenti non saranno presi in considerazione per la correzione. Non scrivere a matita

1. Si consideri una lista di numeri interi Lista implementata come lista doppiamente puntata non circolare utilizzando la seguente struttura

struct elemento {

struct elemento *prev;

int inf;

struct elemento *next;}

struct elemento *Lista;

si implementi la funzione int controlla_palindroma(struct elemento *Lista) che

controlla se la stringa di numeri rappresentata dalla lista è palindroma. Si ricordi che una

stringa di numeri è palindroma se essa è uguale alla sua inversa. Es. 121 è palindroma,

6336 è palindroma, mentre 1332 non è palindroma.

(2)

2. Si consideri una coda rappresentata con un array H di interi. Si implementi in linguaggio C

la funzione void reverse(int H[MAX]), che prende in input la coda di interi H e fa il

riverse della coda. Si ricordi che in una coda gli elementi vanno sempre aggiunti alla fine

della coda e vanno sempre tolti dalla testa (un accesso diretto all’interno dell’array non

sarà preso in considerazione per la correzione). Se necessario, è possibile utilizzare altre

strutture dati di appoggio. Descrivere la complessità asintotica della funzione reverse.

(3)

3. Siano G e H due grafi orientati non pesati di n vertici 0,1,…, n-1 rappresentati con liste di adiacenza utilizzando la seguente struttura:

typedef struct graph {

int nv;

edge **adj; } graph;

graph *G, *H;

typedef struct edge { int key;

struct edge *next; } edge;

scrivere in linguaggio C una funzione che restituisca un nuovo grafo T complemento degli

archi di G rispetto agli archi di H, rappresentato con liste di adiacenza, secondo la

struttura dati graph definita sopra. In pratica, T avrà tutti i vertici di G e H e conterrà un

arco da un nodo i a un nodo j se e solo se tale arco è presente in G ma non in H. Descrivere

la complessità asintotica della funzione implementata.

(4)

4. Sia G un grafo orientato non pesato di n vertici 0,1,…, n-1 rappresentato con liste di

adiacenza utilizzando la struttura dati graph presentata nell’esercizio precedente, scrivere

in linguaggio C una funzione che calcoli se il grafo ha almeno due vertici che hanno lo

stesso insieme di nodi adiacenti. Descrivere la complessità asintotica della funzione

implementata.

(5)

5. Sia G un grafo pesato non orientate in cui tutti gli archi hanno peso differente (cioè, non ci

sono due archi con lo stesso peso). Sia T un albero minimo di copertura del grafo. Un

percorso in T tra due vertici è necessariamente un percorso minimo anche del grafo? Dare

una prova o un controesempio.

Riferimenti

Documenti correlati

Le consegne saranno lette dall’insegnante procedendo con un item alla volta senza dare altre interpretazioni e lasciando poi il tempo per eseguire.. Per ogni esercizio ( esclusi

In un’azienda delle lastre rettangolari di altezza fissa h e larghezza 218 cm, devono essere tagliate in rettangoli di altezza h e larghezza variabile.. Si formuli il problema

[r]

[r]

[r]

Si implementi la funzione void togli_ripetizioni (struct elemento *Lista) che elimina dalla lista Lista tutte le ripetizioni di elementi senza usare strutture

Supponendo che la rete di n stazioni e m collegamenti sia rappresentata da un grafo non orientato utilizzando una rappresentazione con liste di adiacenza come

implementare una funzione in linguaggio C in_grafo che trasforma l’albero in grafo utilizzando una rappresentazione con matrice di adiacenza. Descrivere