Laboratorio di Algoritmi e Strutture Dati



Documenti analoghi
Laboratorio di Algoritmi e Strutture Dati


Laboratorio di Algoritmi e Strutture Dati

Esercizi (esercizi 1, 2, 3 e 4) Totale /6 /12 /6 /6 /30

Gennaio

Laboratorio di Algoritmi e Strutture Dati

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

LISTE, INSIEMI, ALBERI E RICORSIONE

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Corso di Fondamenti di Informatica II

Laboratorio di Algoritmi e Strutture Dati

DISCIPLINA IVA NEL SUBAPPALTO

Le Liste. Elisa Marengo. Università degli Studi di Torino Dipartimento di Informatica. Elisa Marengo (UNITO) Le Liste 1 / 31

Compito di Fondamenti di Informatica

Semantica Operazionale del linguaggio imperativo IMP

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

La struttura dati ad albero binario

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

L interesse nella macchina di Turing

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Algoritmi su array / 2

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Corso di Laurea in Matematica

Corso di Fondamenti di Informatica Algoritmi su array / 2

Appello di Informatica B

AN ATOCISMO BAN CARIO

Problem solving elementare su dati vettoriali

Laboratorio di Algoritmi e Strutture Dati

MODULO VERIFICA MACCHINA versione per CARRELLO

Lab 11 Gestione file di testo"

Finanziamenti alle Imprese Regionali Statali Comunitari

1. Soluzione esercizio XYZ SpA

OGGETTO Atto di indirizzo per affidamento servizio ricovero, custodia e mantenimento cani randagi vaganti sul territorio comunale.

Studente (Cognome Nome): Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 21 Dicembre 2006

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

obiettivi di questa seconda metà del corso fare un passo avanti rispetto a :... meccanismi di composizione dei dati

Università degli Studi di Ferrara

Gestione dinamica di una pila

2. Spiegare brevemente qual è la funzione del compilatore e la sua importanza per il programmatore.

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Algoritmi di Ricerca. Esempi di programmi Java

Relazione Tecnica illustrativa della RETE IDRANTI e Calcoli di Dimensionamento

Laboratorio di Fondamenti di Informatica anno accademico Esercizi proposti il

I costi di LEED in un mercato emergente

Informatica 3. LEZIONE 7: Fondamenti di programmazione orientata agli oggetti (1)

Realizzazione di una classe con un associazione

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

CREARE UNA LIBRERIA IN C

Il primo ruolo che può essere attribuito alla moneta è quello di intermediario dello scambio.

Fondamenti di Informatica 2

Ricerca di un valore nell array

Lezione 4 Le code. Informatica. 26 Aprile Le pizze devono essere preparate e consegnate seguendo l ordine di arrivo degli ordini

Breve guida all uso del programma L Edicolante.

COMUNE DI BARI SARDO PROVINCIA OGLIASTRA DELIBERAZIONE DELLA GIUNTA COMUNALE

Algoritmi e Strutture Dati

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Cognome e nome nato a in data carica ricoperta DICHIARA / DICHIARANO

dall argomento argomento della malloc()

I tipi di dato astratti

Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008

Algoritmi e Strutture Dati & Laboratorio di Algoritmi e Programmazione

CONCETTO DI ANNIDAMENTO

COTTIMO FIDUCIARIO N. 2012/93 Allegato 4 Modello per la formulazione dell offerta economica LOTTO 1

Utilizzo e scrittura di classi

Aniello Murano Problemi non decidibili e riducibilità

Laboratorio di Algoritmi e Strutture Dati

Introduzione ai tipi di dato astratti: applicazione alle liste

Programmazione I - Laboratorio

Il tipo di dato astratto Pila

Tipi di Dato Ricorsivi

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

ESERCIZI DI PROGRAMMAZIONE C/C++ per le classi terza

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Introduzione al MATLAB c Parte 2

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

MICROECONOMIA Teoria dell impresa

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Università degli Studi di Messina

Informatica 3. Informatica 3. LEZIONE 12: Liste. Lezione 12 - Modulo 1. Posizione corrente. Introduzione

Esame di Informatica Generale 9 CFU 21 Giugno 2011 Professori: Carulli, Fiorino, Mazzei

Cos è un incarico di due diligence? Schema tipico di un operazione di acquisizione Strategia di acquisizione e analisi strategica Due diligence

COGNOME E NOME (IN STAMPATELLO) MATRICOLA

Calcolare il massimo di una lista

Alberi binari di ricerca

Vettori Algoritmi elementari di ordinamento

(1) - - (4) R4 = R7 * R7 (4) (2) (3) 5 - (4) rinviata perché in WAW con (3) 6 (3) e (4) ritirabili ma attendono il completamento di (2) (2) (3) (4)

Basi di Dati Relazione di laboratorio Gruppo 11: Blé Enrico, Gamberini Tarin, Menegale Alessandro. DB Henry Books

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Aniello Murano NP- Completezza (prima parte)

Laboratorio di programmazione

I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.

Crittografia. Primalità e Fattorizzazione. Corso di Laurea Specialistica. in Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Esercizio 1. Esercizio 2

Strutture Dati e Liste 1 FONDAMENTI DI INFORMATICA FRANCO ZAMBONELLI STRUTTURE DATI E LISTE. Strutture Dati: Liste, Code, Pile

Ricorsione. (da lucidi di Marco Benedetti)

Transcript:

Laboratorio di Algoritmi e Strutture Dati Prof. Aniello Murano Implementazioni di Liste Doppiamente Puntate e Circolari Corso di Laurea Codice insegnamento Email docente Anno accademico Informatica 13917 murano@na.infn.it 2007/2008 Lezione numero: 9 Parole chiave: Liste dinamiche, liste circolari, liste doppiamente puntate 2 Indice Liste puntate semplici: Gli elementi sono organizzati in modo sequenziale e si possono scorrere in un unico verso. La lista ha un primo elemento (testa) e un ultimo elemento (coda) Testa 3 7 2 9 Liste doppiamente puntate: Sono simili alle liste puntate semplici, ma permettono di scorrere gli elementi in entrambi i versi 3 7 2 9 Liste puntate semplici circolari: Sono liste puntate semplici senza testa ne coda. coda 3 7 2 9 Liste doppiamente puntate circolari: Liste doppiamente puntate senza testa ne coda. 3 7 2 9 1

3 Liste puntate doppie Una Lista Doppia Puntata è un insieme dinamico in cui ogni elemento ha uno o più campi contenenti informazioni e due riferimenti, uno all elemento successivo (next) della lista ed uno all elemento precedente (prev) della lista. 4 Implementazione in C Per definire la struttura di un elemento di una lista doppiamente puntata bisogna utilizzare due puntatori alla stessa struttura. Il primo punterà all elemento precedente mentre il secondo punterà a quello successivo: struct el struct el *prev; int inf; struct el *next; Per l inizializzazione di una lista doppiamente puntata si può considerare il codice visto per l inizializazione delle liste singolarmente puntate, introducendo opportunamente il codice per la gestione del puntatore all elemento precedente. 2

5 Funzione crea_lista() 1/2 La funzione crea_lista() crea due puntatori ad elemento, uno di nome p (puntatore al primo elemento della lista) e l'altro di nome punt (puntatore che permette di scorrere la lista); struct el *crea_lista() struct el *p, *punt; int i, n; printf("\n Specificare il numero di elementi... "); scanf("%d", &n); if(n==0) p = NULL; else /* creazione primo elemento */ p = (struct el *)malloc(sizeof(struct el)); printf("\ninserisci il primo valore: "); scanf("%d", &p->inf); punt = p; p- > prev=null; p prev punt inf 5 next 6 Funzione crea_lista() 2/2 for(i=2; i<=n; i++) punt->next = (struct el *)malloc(sizeof(struct el)); punt->next->prev=punt; punt = punt->next; printf("\ninserisci il %d elemento: ", i); scanf("%d", &punt->inf); // chiudo il for punt->next = NULL; // marcatore fine lista // chiudo l'if-else return(p); // chiudo la funzione 3

7 Inserimento in coda: main() #include <stdio.h> #include <malloc.h> struct el struct el *prev; int inf; struct el *next;; struct el *crealista(); int inserisci_in_coda(struct el*,int); int main() struct el *lista; int valore; lista=crealista(); stampalista(); printf("\ninserisci elemento da inserire: "); scanf("%d", &valore); inserisci_in_coda(lista,valore); 8 Inserimento in coda: funzione struct el *inserisci(struct el *p, int valore) struct el *nuovo=null, struct el *testa; if (p==null) p=(struct el *)malloc(sizeof(struct el)); p->inf=valore; p->prev=null; testa=p; else testa=p; while (p->next!= NULL) p=p->next; nuovo=(struct el *)malloc(sizeof(struct el)); nuovo->prev=p; nuovo->inf=valore; nuovo->next = NULL; p->next=nuovo; return testa; 4

9 Liste puntate circolari Una Lista Circolare puntata è un una lista puntata in cui il puntatore next dell ultimo elemento della lista punta all elemento in testa alla lista. Infine, se la lista è doppiamente puntata, il puntatore prev della testa della lista punta all elemento in coda alla lista 10 Funzione crea_lista() 1/2 La funzione crea_lista() crea due puntatori ad elemento, uno di nome p (al primo elemento della lista) e l'altro di nome punt (che permette di scorrere la lista); struct el *crea_lista() struct el *p, *punt; int i, n; printf("\n Specificare il numero di elementi... "); scanf("%d", &n); if(n==0) p = NULL; else /* creazione primo elemento */ p = (struct el *)malloc(sizeof(struct el)); printf("\ninserisci il primo valore: "); scanf("%d", &p->inf); punt = p; p- > prev=null; p prev punt inf 5 next 5

11 Funzione crea_lista() 2/2 for(i=2; i<=n; i++) punt->next = (struct el *)malloc(sizeof(struct el)); punt->next->prev=punt; punt = punt->next; printf("\ninserisci il %d elemento: ", i); scanf("%d", &punt->inf); // chiudo il for punt->next = p; p->prev = punt; // circolarità della lista // chiudo l'if-else return(p); // chiudo la funzione 12 Inserimento all interno di liste doppiamente puntate Supponiamo di voler inserire un elemento valore in una lista prima dell elemento puntato da pos testa struct el *ins_in_testa(stuct el *pos, int val) LISTA *p; p = (struct el *)malloc(sizeof(struct el)); p -> inf = val; /* aggiornamento dei puntatori */ p -> next = pos; p -> prev = pos -> prev; if!(pos==null) pos -> prev -> next = p; pos -> prev = p; return (p); coda 6

13 Eliminazione elemento da una lista circolare doppiamente puntata struct el *togli( struct el *p, int valore) struct el *inizio=null; int i=1; if (p!=null) inizio=p; do if (p->inf==valore) if (p- >next==p) inizio=null; else p- > prev->next=p- > next; p- > next->prev=p- > prev; if p==inizio inizio=p- > next; free(p); p=null; else p=p- > next; while (p!=inizio && p!=null); return inizio; Punterà alla testa della lista Vero se il valore cercato è nella lista Controlla che tutta la lista è stata letta Nel caso in cui il nodo rimosso è la testa della lista 14 Esercizio 1 Siano L1 e L2 due liste non circolare doppiamente puntate definite da struct el L1, L2; struct el *prev; int inf; struct el *next; Si supponga che L1 e L2 siano ordinate in senso crescente. Scrivere una funzione ricorsiva in linguaggio C che prese in input le due liste L1 e L2 generi una nuova lista L3 ordinata in senso crescente che contenga tutti gli elementi di L1 e L2 7

This document was created with Win2PDF available at http://www.win2pdf.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only. This page will not be added after purchasing Win2PDF.