Uni.AlSp-Code History
Hide minor edits - Show changes to markup
October 19, 2007, at 03:36 PM
by
- Changed line 1 from:
(:title Algoritmi e strutture dati - Specifiche:)
to:
(:title Algoritmi e strutture dati - Specifiche: Code:)
October 19, 2007, at 02:20 PM
by
- Changed line 13 from:
- creapila: () -> coda\\
to:
- creacoda: () -> coda\\
October 19, 2007, at 02:20 PM
by
- Added lines 1-103:
(:title Algoritmi e strutture dati - Specifiche:) Torna alla pagina di Algoritmi e strutture dati
:: Algoritmi e strutture dati - Specifiche ::
Code
Sintassi
- creapila: () -> coda
Crea ed inizializza una coda alla sequenza vuota. - codavuota: (coda) -> booleano
Restituisce vero o falso a seconda che la coda sia vuota o no. - leggicoda: (coda) -> tipoelem
Legge il valore dell'elemento in testa alla coda. - fuoricoda: (coda) -> coda
Elimina l'elemento che si trova in testa alla coda. - incoda: (tipoelem, coda) -> coda
Aggiunge un elemento in fondo alla coda.
Semantica
- creacoda() = Q'
Post: Q' = Λ - codavuota(Q) = b
Post: b = vero, se Q = Λ; b = falso altrimenti - leggicoda(Q) = a
Pre: Q = a1, a2, ... , an con n≥1
Post: a = a1 - fuoricoda(Q) = Q'
Pre: Q = a1, a2, ... , an con n≥1
Post: Q' = a2, a3, ... , an se n>1, Q' = Λ se n=1 - incoda(a, Q) = Q'
Pre: Q = a1, a2, ... , an con n≥0
Post: Q' = a1, a2, ... , an, a
Implementazione in C++
Realizzazione con vettore circolare
#define MAXL 100 typedef struct _coda { int testa, lung; tipoelem elementi[MAXL]; } coda; coda Q;
- creacoda:
void creacoda (coda *Q) { Q->testa = Q->lung = 0; }
- codavuota:
boolean codavuota (coda *Q) { return (Q->lung == 0; }
- leggicoda:
tipoelem codavuota (coda *Q) { if( !codavuota(Q)) return (Q->elementi[Q->testa]); }
- fuoricoda:
void fuoricoda (coda *Q) { if( !codavuota(Q)) { Q->testa = (Q->testa+1) % MAXL; Q->lung = Q->lung -1; } }
- incoda:
tipoelem incoda (tipoelem a, coda *Q) { if( Q->lung == MAXL) printf("Coda satura\n"); else { Q->elementi[(Q->testa + Q.lung) % MAXL] = a; Q->lung++; } }