ramo102
04-07-2006, 18:05
Ciao a tutti!
Ho un problema con un programma implementato in C in cui devo leggere
una lista circolare: quando provo ad effettuare il ciclo di lettura non
riesco più ad uscirne, in quanto viene stampato infinite volte l'ultimo
elemento della lista stessa.
Questo è il codice da me scritto per l'introduzione degli elementi:
void inserisci_dati (tipo **head,tipo **tail)
{
tipo *pcorr;
pcorr=(tipo *)malloc(sizeof(tipo));
if(*head==NULL)
{
*head=pcorr;
(**head).next=*head; /* il campo prox punta a se stesso */
(**tail)=(**head);
}
else
{
(*pcorr).next=*head;
*head=pcorr;
(**tail).next=*head; /* l'ultimo elem. punta al primo */
}
return;
}
E questo è il codice per la lettura e la stampa su video:
void stampa(tipo **head,tipo **tail)
{
tipo *pcorr;
pcorr=*head;
do
{
printf("%s\n",(*pcorr).nome)
pcorr=(*pcorr).next;
}
while(pcorr!=(**tail).next);
}
Mi dà lo stesso problema anche se provo a mettere come condizione
d'uscita del while pcorr!=(*head), visto che leggo l'elemento in testa
alla prima iterazione e subito dopo aggiorno pcorr, ma non funziona lo
stesso. :muro:
Qualcuno ha idea di come si faccia?
Ho un problema con un programma implementato in C in cui devo leggere
una lista circolare: quando provo ad effettuare il ciclo di lettura non
riesco più ad uscirne, in quanto viene stampato infinite volte l'ultimo
elemento della lista stessa.
Questo è il codice da me scritto per l'introduzione degli elementi:
void inserisci_dati (tipo **head,tipo **tail)
{
tipo *pcorr;
pcorr=(tipo *)malloc(sizeof(tipo));
if(*head==NULL)
{
*head=pcorr;
(**head).next=*head; /* il campo prox punta a se stesso */
(**tail)=(**head);
}
else
{
(*pcorr).next=*head;
*head=pcorr;
(**tail).next=*head; /* l'ultimo elem. punta al primo */
}
return;
}
E questo è il codice per la lettura e la stampa su video:
void stampa(tipo **head,tipo **tail)
{
tipo *pcorr;
pcorr=*head;
do
{
printf("%s\n",(*pcorr).nome)
pcorr=(*pcorr).next;
}
while(pcorr!=(**tail).next);
}
Mi dà lo stesso problema anche se provo a mettere come condizione
d'uscita del while pcorr!=(*head), visto che leggo l'elemento in testa
alla prima iterazione e subito dopo aggiorno pcorr, ma non funziona lo
stesso. :muro:
Qualcuno ha idea di come si faccia?