marcus81
07-06-2004, 17:32
Salve ragazzi ho un problemino nella gestione di una coda...
Dunque ho una coda(FIFO) e devo scambiare un elemento della coda scelto a caso con quello in testa alla coda mantenendo aggiornati i puntatori testa(punta alla testa della coda) e coda(punta all'ultimo elemento nella coda)...
Dato l'indice dell'elemento da scambiare col primo io ho scritto questo codice:
cont=1;
paus=testa;
while(cont<casuale-1)
{
paus=paus->next; //Scorro fino all'elemento precedente
cont++;
}
paus2=testa->next;
if (testa==paus){ //Se ci sono solo 2 elementi in totale
testa->next=NULL;
paus2->next=testa;
coda=testa;
testa=paus2;
}
else{
testa->next=paus->next->next;
paus->next->next=paus2;
paus3=paus->next;
paus->next=testa;
if(paus3==coda) coda=testa;
testa=paus3;
}
Lo so che il codice sembrerà un pò ostruso e poco efficiente...
Il fatto è che sembra funzionare però a volte mi da errore...probabilmente fa qualche accesso errato alla memoria anche se non ho capito perchè:muro:
Dove sbaglio?
Grazie
:)
Dunque ho una coda(FIFO) e devo scambiare un elemento della coda scelto a caso con quello in testa alla coda mantenendo aggiornati i puntatori testa(punta alla testa della coda) e coda(punta all'ultimo elemento nella coda)...
Dato l'indice dell'elemento da scambiare col primo io ho scritto questo codice:
cont=1;
paus=testa;
while(cont<casuale-1)
{
paus=paus->next; //Scorro fino all'elemento precedente
cont++;
}
paus2=testa->next;
if (testa==paus){ //Se ci sono solo 2 elementi in totale
testa->next=NULL;
paus2->next=testa;
coda=testa;
testa=paus2;
}
else{
testa->next=paus->next->next;
paus->next->next=paus2;
paus3=paus->next;
paus->next=testa;
if(paus3==coda) coda=testa;
testa=paus3;
}
Lo so che il codice sembrerà un pò ostruso e poco efficiente...
Il fatto è che sembra funzionare però a volte mi da errore...probabilmente fa qualche accesso errato alla memoria anche se non ho capito perchè:muro:
Dove sbaglio?
Grazie
:)