Appunti di programmazione

Appunti per il corso universitario di programmazione, riferito al linguaggio ANSI C
Redatti all'università di Venezia

ARGOMENTI

STRUTTURA COMPUTER

DEFINIZIONI

TASTIERA E TIPI

AMBIENTE E MEMORIA

COMANDI

FUNZIONI E PROCEDURE

TIPI DERIVATI

PUNTATORI

STRINGHE

ARRAY DI PUNTATORI

STRUTTURE

TYPEDEF E ENUM

PUNTATORI A PROCEDURE

ALLOCAZIONE DINAMICA

LISTE

ALGORITMI

ERRORI

LISTE

lista semplice (o lineare) = è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi; ciascun elemento contiene una o più informazioni, e un puntatore per mezzo del quale è legato al successivo

Indichiamo con info la parte informazione di ogni elemento, con coda la parte puntatore e con lista il puntatore al primo elemento della lista

lista vuota = lista priva di elementi, rappresentata da lista che punta a NULL

La parte informazione (info) dell’elemento dipende dal tipo di dati che stiamo trattando: può essere un tipo semplice o derivato


ALBERI BINARI

struct{

int val;

struct A* sin;

struct A* des;

};


è più comodo definire queste variabili nello heap perchè il vantaggio di queste strutture è la dinamicità: supponiamo di avere un array e di voler eliminarne un elemento interno: copio tutti gli elementi successivi nelle rispettive caselle precedenti, ma sarebbe meglio eliminare l'ultima che rimane vuota; se utilizzo lo heap sarà sufficiente cambiare l'indirizzo di un puntatore ed eliminare dalla memoria la variabile non più utiizzata

l'ultimo elemento della lista concatenata dovrà contenere un puntatore a NULL (a meno che l'ultimo elemento non punti al primo)


commenti alle slide sulle liste:

typedef struct T{

t1 a;

t2 b;

struct t* c;

}elemento;


typedef elemento * lista;


lista l;

l = NULL; // lista vuota

l = (elemento*) malloc (sizeof(elemento));

oppure:

l = (lista) malloc (sizeof(elemento));

dereferenzio lista e seleziono il campo nome:

lista -> nome;

"return lista" della procedura crea mi restituisce un indirizzo

prima applica la freccia e poi l'operatore &:

&lista->eta ;

ESERCIZIO DI RIEPILOGO:

si considerino le seguenti definizioni di procedura:

char sempre_a (char x){return 'a'}

char sempre_b (char x){return 'b'}

  1. si definisca il tipo sempre_k a cui appartengono entrambe

  2. dichiarare una variabile di tipo sempre_k ed inizializzarla a sempre_a

  3. dichiarare un array di tipo sempre_k di 2 elem. ed inizializzarlo assegnando ad entrambi gli elementi il valore sempre_b

  4. usando l'array applicare il 1° elemento dell'array passandogli il risultato del secondo elemento dell'array chiamato con 'a' (si tratta dell’esecuzione di una funzione)


  1. typedef char(*Sempre_k) (char x);

  2. Sempre_k l = sempre_a

  3. Sempre_k a[2] = {sempre_b, sempre_b}

  4. char h; h = *(a[1])((*(a[0]))('a'));

Ritorna sopra | Home page