 
View Full Version : [c]implementare coda circolare
19spike83
26-04-2006, 14:22
salve ragazzi volevo chiedervi se qualcuno di voi avesse una coda circolare in c già implementata con funzioni, aggiungi alla coda , o rimuovi, grazie a tutti in anticipo.
Mi fareste davvero un gran piacere e risparmierei davvero molto tempo.
La cosa migliore sarebbe che tu la scrivessi da solo...altrimenti cosa impari ?
Comunque è semplici...ti posso dare qualche indizio...
Prendi un vettore di dimensione N...
Hai due indici...uno alla testa e uno alla coda...
A coda vuota gli indici puntano al primo elemento (elemento 0 del vettore)...
Per l'inserimento basta inserire l'elemento all'indice puntato dall'indice alla coda...ed incrementi l'indice...
Per l'estrazione, ritorni l'elemento puntato dall'indice alla testa ed incrementi l'indice che punta alla testa...
Lascio a te le condizioni di coda vuota o piena da verificare rispettivamente nell'estrazione e nell'inserimento (verifiche da fare prima di incrementare i rispettivi contatori)...
ma se si usa un vettore si crea una limitazione nella dimensione della coda..non e' meglio crearla dinamicamente?
Una coda circolare è storicamente limitata...altrimenti non può essere circolare...
ok. comunque si può anche implementarla dimamicamente
Mi puoi fare un esempio di coda circolare dinamica... Che senso ha farla circolare se è dinamica ? A meno che per dinamica tu non intenda con il vettore allocato dinamicamente...
Mi spiego meglio... Se la facessi dinamica non farei assolutamente una coda circolare, ma farei una lista e allocherei un nuovo nodo per ogni inserimento in coda e deallocherei il nodo dell'elemento estratto dalla testa... Non è una coda circoalre, ma è una normale coda...
19spike83
29-04-2006, 15:22
per quello che sò si può fare sia con un vettore ma è molto incasinato ci ho provato e non ce la faccio , poi la si può fare anke dinamicamente e quella l ho già fatta ma è meno veloce nell esecuzione.
mi servirebbe allocarla su un vetore di uno spazio fissato ,ho visto esempi in rete ma non in c.
ps non mi interessa molto imparare a fare queste cose le imparerò sul campo di battaglia a suo tempo come tutti quindi se ne avete una già fatta grazie per l aiuto.
Te l'ho spiegato sopra come farla con un vettore statico...
poi la si può fare anke dinamicamente e quella l ho già fatta ma è meno veloce nell esecuzione.
Forse intendi una lista linkata circolarmente ? Ma come dicevo ha poco senso a meno che gli elementi all'interno della lista siano sempre gli stessi (o che vengano inseriti ed estratti non molto frequentemente)... In tal caso potrebbe anche servire e con un semplice puntatore si potrebbe scorrere circolarmente tutti gli elementi...
Diciamo che l'informazione fondamentale delle strutture è diversa...la coda circolare è una comune coda dove l'informazione sta nell'inserimento e nella rimozione...il fatto che sia circolare è solo una conseguenza della rappresentazione stessa dei dati (cioè, se fosse possibile inserire in testa e rimuovere in coda senza dover sfruttare circolarmente il vettore non esisterebbe nemmeno)...mentre nella lista linkata circolarmente il fattore saliente sta nella circolarità, mentre l'inserimento e la rimozione sono solo un fattore accessorio...
Una coda circolare dinamica non ha senso per definizione :mbe: 
Realizzarla con i vettori statici è molto semplice, basta usare in modo furbo l'operatore % evitando controlli inutili
19spike83
30-04-2006, 11:12
già questa potrebbe essere un idea ma non ho capito come .....non è che potete spostare esempi??
qualcosa del genere
void add(char* item)
{
items[tail] = item;
tail = (tail + 1) % count;
count++;
}
char* extract();
{
char* s = items[head];
head = (head + 1) % count;
count--;
retun s;
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.