Uni.AlSp-Liste History

Hide minor edits - Show changes to markup

October 19, 2007, at 03:35 PM by Ido -
Changed line 1 from:

(:title Algoritmi e strutture dati - Specifiche:)

to:

(:title Algoritmi e strutture dati - Specifiche: Liste:)

October 19, 2007, at 01:24 PM by Ido -
Changed lines 113-114 from:
  1. define MAXL 100;
to:
  1. define MAXL 100
October 19, 2007, at 01:09 PM by Ido -
Changed lines 13-24 from:
  • crealiste: () -> lista
  • listavuota: (lista) -> booleano
  • primolista: (lista) -> posizione
  • ultimolista: (lista) -> posizione
  • succlista: (posizione, lista) -> posizione
  • predlista: (posizione, lista) -> posizione
  • finelista: (posizione, lista) -> booleano
  • leggilista: (posizione, lista) -> tipoelem
  • scrivilista: (tipoelem, posizione, lista) -> lista
  • inslista: (tipoelem, posizione, lista) -> lista
  • canclista: (posizione, lista) -> lista
to:
  • crealiste: () -> lista
    Crea ed inizializza una lista ad un particolare valore, di solito la sequenza vuota.
  • listavuota: (lista) -> booleano
    Restituisce vero o falso a seconda che la lista sia vuota o no.
  • primolista: (lista) -> posizione
    Permette di accedere al primo elemento della lista.
  • ultimolista: (lista) -> posizione
    Permette di accedere all'ultimo elemento della lista.
  • succlista: (posizione, lista) -> posizione
    Permette di passare all'elemento successivo della lista rispetto alla posizione indicata.
  • predlista: (posizione, lista) -> posizione
    Permette di passare all'elemento precedente della lista rispetto alla posizione indicata.
  • finelista: (posizione, lista) -> booleano
    Restituisce vero o falso a seconda che la posizione sia o no l'ultima della lista.
  • leggilista: (posizione, lista) -> tipoelem
    Legge il valore dell'elemento nella posizione specificata della lista.
  • scrivilista: (tipoelem, posizione, lista) -> lista
    Cambia il valore dell'elemento nella posizione specificata della lista.
  • inslista: (tipoelem, posizione, lista) -> lista
    Inserisce un nuovo elemento nella lista.
  • canclista: (posizione, lista) -> lista
    Cancella l'elemento nella posizione specificata della lista.
October 18, 2007, at 02:09 PM by Ido -
Changed line 130 from:

Trasferisce la cella putanta da p nella cella prima di quella puntata da q.\\

to:

Trasferisce la cella putanta da p nella cella prima di quella puntata da q.\\

October 18, 2007, at 02:08 PM by Ido -
Changed lines 129-130 from:
  • sposta:
    Trasferisce la cella putanta da p nella cella prima di quella puntata da q.
to:
  • sposta:
    Trasferisce la cella putanta da p nella cella prima di quella puntata da q.\\
October 18, 2007, at 02:08 PM by Ido -
Changed line 73 from:
  • inslista: \\
to:
  • inslista: \\
Added line 75:
Changed line 87 from:
  • canclista: \\
to:
  • canclista: \\
Added line 89:
Added lines 100-146:
Realizzazione con cursori
#define MAXL 100;

typedef int lista, posizione;
typedef struct _cella {
   posizione prev, next;
   tipoelem elemento;
} cella;

lista listalibera;
cella spazio[MAXL];
  • inizializzare:
    
    void inizializza () {
       int i; 
       listalibera = 0;
       spazio[0].next = 1;
       spazio[0].prev = MAXL - 1;
       for (i=1; i<MAXL; i++) {
          spazio[i].next = (i+1) % MAXL;
          spazio[i].prev = (i-1) % MAXL;
       }
    }
    
  • sposta:
    Trasferisce la cella putanta da p nella cella prima di quella puntata da q.

void sposta (posizione *p, posizione *q) {
   posizione t;
   t = spazio[p].next;
   spazio[spazio[p].prev].next = spazio[p].next;
   spazio[spazio[p].next].prev = spazio[p].prev;
   spazio[p].prev = spazio[q].prev;
   spazio[spazio[q].prev].next = p;
   spazio[p].next = q;
   spazio[q].prev = p;
   q = p;
   p = t;
}
October 18, 2007, at 02:01 PM by Ido -
Deleted line 73:

Deleted line 86:

October 18, 2007, at 01:58 PM by Ido -
Changed lines 53-54 from:
L' = a1, a2, ... , an, a se i = n + 1
L' = a1, a2, ... , an se i = 0
to:
L' = a1, a2, ... , an, a se i = n + 1
L' = a1, a2, ... , an se i = 0
Changed lines 60-64 from:
  • creavettore: tipoelem v[n];
  • leggivettore: v[i];
  • scrivivettore: v[i] = e;
to:

Si condidera una lista bidirezionale circolare con sentinella

Realizzazione con puntatori
typedef struct _cella {
   tipoelem elemento;
   struct _cella *next, *prev;
} cella;

typedef cella posizione, lista;
typedef short boolean;
  • inslista:
void inslista (tipoelem a, posizione *p) {
   posizione *q;
   q = malloc (sizeof(cella));
   q->elemento = a;
   q->prev = p->prev;
   q->next = p;
   p->prev->next = q;
   p->prev = q;
}
  • canclista:
void canclista (posizione **p) {
   posizione *q;
   q = *p;
   q->prev->next = q->next;
   q->next->prev = q->prev;
   *p = q->next;
   free(q);
}
October 18, 2007, at 01:51 PM by Ido -
Changed lines 52-53 from:

Post: L' = a1, a2, ... , ai-1, a, ai+1, ... , an se 1≤in
->L' = a1, a2, ... , an, a se i = n + 1\\

to:

Post: L' = a1, a2, ... , ai-1, a, ai+1, ... , an se 1≤in

L' = a1, a2, ... , an, a se i = n + 1
October 18, 2007, at 01:51 PM by Ido -
Changed lines 38-58 from:
to:
  • predlista(p, L) = q
    Pre: L = a1, a2, ... , an e p = posi per un i, 1≤in
    Post: q = posi-1
  • finelista(p, L) = b
    Pre: L = a1, a2, ... , an e p = posi per un i, 1≤in+1
    Post: b = vero, se p = pos0 o p = posn+1 ; b = falso altrimenti
  • leggilista(p, L) = a
    Pre: L = a1, a2, ... , an e p = posi per un i, 1≤in
    Post: a = ai
  • scrivilista(a, p, L) = L'
    Pre: L = a1, a2, ... , an e p = posi per un i, 1≤in
    Post: L' = a1, a2, ... , ai-1, a, ai+1, ... , an
  • inslista(a, p, L) = L'
    Pre: L = a1, a2, ... , an e p = posi per un i, 1≤in+1
    Post: L' = a1, a2, ... , ai-1, a, ai+1, ... , an se 1≤in
    ->L' = a1, a2, ... , an, a se i = n + 1
    ->L' = a1, a2, ... , an se i = 0
  • canclista(p, L) = L'
    Pre: L = a1, a2, ... , an e p = posi per un i, 1≤in
    Post: L' = a1, a2, ... , ai-1, ai+1, ... , an
October 18, 2007, at 01:42 PM by Ido -
Added lines 1-46:

(:title Algoritmi e strutture dati - Specifiche:) Torna alla pagina di Algoritmi e strutture dati - Specifiche


 :: Algoritmi e strutture dati - Specifiche ::

Liste


Sintassi

  • crealiste: () -> lista
  • listavuota: (lista) -> booleano
  • primolista: (lista) -> posizione
  • ultimolista: (lista) -> posizione
  • succlista: (posizione, lista) -> posizione
  • predlista: (posizione, lista) -> posizione
  • finelista: (posizione, lista) -> booleano
  • leggilista: (posizione, lista) -> tipoelem
  • scrivilista: (tipoelem, posizione, lista) -> lista
  • inslista: (tipoelem, posizione, lista) -> lista
  • canclista: (posizione, lista) -> lista

Semantica

  • crealista() = L'
    Post: L' = Λ
  • listavuota(L) = b
    Post: b = vero, se L = Λ; b = falso altrimenti
  • primolista(L) = p
    Post: p = pos1
  • ultimolista(L) = p
    Post: p = posn
  • succlista(p, L) = q
    Pre: L = a1, a2, ... , an e p = posi per un i, 1≤in
    Post: q = posi+1

Implementazione in C++

  • creavettore: tipoelem v[n];
  • leggivettore: v[i];
  • scrivivettore: v[i] = e;

Torna alla pagina di Algoritmi e strutture dati - Specifiche