Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Come si implementano le code circolari?
Forum - C/C++ - Come si implementano le code circolari?

Avatar
elio_2he (Normal User)
Newbie


Messaggi: 6
Iscritto: 25/05/2015

Segnala al moderatore
Postato alle 18:02
Venerdì, 12/06/2015
Salve a tutti,
ho qualche problemino a capire l'implementazione delle code circolari.
In realtà so già come funziona la struttura coda e quindi so che lavora con una politica FIFO e che è un vettore con 2 puntatori che puntano alla testa e alla "coda" della struttura, però vedendo gli esempi non riesco a capire l'implementazione delle funzioni di gestione della coda ; per esempio per quanto riguarda la funzione di accodamento, che il mio libro chiama APPEND ,ho qualcosa del tipo

(in una sorta di pseudocodice)

APPEND

coda[tail]=elemento_da_inserire
tail=(tail+1 )% dim
nelem++

// tail è la variabile che punta al primo spazio vuoto del vettore dove poter inserire un valore
//dim è la dimensione massima del vettore
//nelem è il numero di elementi presenti nel vettore

Ciò che mi turba è quel tail=(tail+1)%dim  non so perchè usa il modulo ( che forse neanche ho capito bene a cosa serve )

grazie per l'attenzione !!!:D  

PM Quote
Avatar
Uno sciame di API (Member)
Pro


Messaggi: 66
Iscritto: 10/07/2012

Segnala al moderatore
Postato alle 19:28
Venerdì, 12/06/2015
Il modulo ti ritorna il resto di una divisione tra due interi, così facendo ti assicuri di non uscire mai fuori dall'array ma di ripartire dal primo elemento, infatti se hai un array di 10 elementi (numerati da 0 a 9) e provi ad accedere all'elemento con indice 10 avrai un errore (o comunque risultati inaspettati), accedendo invece alla cella con indice 10 % 10 (ovvero [indice] % [lunghezzaVettore]), il risultato del modulo ritornerà 0, che sarà appunto l'indice della cella di memoria che andrai a leggere/modificare, in questo modo è come se la cella successiva all'ultima fosse la prima.

PM Quote